---
title: Deprecated Database Engine Features
titleSuffix: SQL Server 2016
description: Find out about deprecated Database Engine features that are still available in SQL Server 2016 (13.x), but shouldn't be used in new applications.
author: MikeRayMSFT
ms.author: mikeray
ms.reviewer: randolphwest
ms.date: 10/21/2025
ms.service: sql
ms.subservice: release-landing
ms.topic: conceptual
ms.custom:
- build-2025
helpviewer_keywords:
- "deprecated features [SQL Server]"
- "Database Engine [SQL Server], backward compatibility"
- "deprecation [SQL Server], feature list"
---
# Deprecated Database Engine features in SQL Server 2016 (13.x)
[!INCLUDE [SQL Server 2016](../includes/applies-to-version/sqlserver2016.md)]
[!INCLUDE [sssql16-md](../includes/sssql16-md.md)] deprecates:
- Data Quality Services (DQS)
- Master Data Services (MDS)
For information about deprecated features in other versions of [!INCLUDE [ssnoversion-md](../includes/ssnoversion-md.md)], see:
- [Deprecated Database Engine features in SQL Server 2025 (17.x) Preview](deprecated-database-engine-features-in-sql-server-2025.md)
- [Deprecated Database Engine features in SQL Server 2022 (16.x)](deprecated-database-engine-features-in-sql-server-2022.md)
- [Deprecated Database Engine features in SQL Server 2019 (15.x)](deprecated-database-engine-features-in-sql-server-2019.md)
- [Deprecated Database Engine features in SQL Server 2017 (14.x)](deprecated-database-engine-features-in-sql-server-2017.md)
## Deprecation guidelines
This article describes the deprecated [!INCLUDE [ssDEnoversion](../includes/ssdenoversion-md.md)] features that are still available in [!INCLUDE [sssql15-md](../includes/sssql16-md.md)]. Deprecated features shouldn't be used in new applications.
When a feature is marked deprecated, it means:
- The feature is in maintenance mode only. No new changes are added, including changes related to addressing interoperability with new features.
- We strive not to remove a deprecated feature from future releases to make upgrades easier. However, under rare situations, we might choose to permanently discontinue (remove) the feature from [!INCLUDE [ssNoVersion](../includes/ssnoversion-md.md)] if it limits future innovations.
- For new development work, don't use deprecated features. For existing applications, plan to modify applications that currently use these features as soon as possible.
For [!INCLUDE [sssql17-md](../includes/sssql17-md.md)], see [Deprecated Database Engine features in SQL Server 2017 (14.x)](deprecated-database-engine-features-in-sql-server-2017.md).
You can monitor the use of deprecated features by using the [!INCLUDE [ssNoVersion](../includes/ssnoversion-md.md)] Deprecated Features Object performance counter and trace events. For more information, see [Use SQL Server Objects](../relational-databases/performance-monitor/use-sql-server-objects.md).
The value of these counters is also available by executing the following statement:
[!INCLUDE [deprecated-os-performance-counters](../includes/deprecated-os-performance-counters.md)]
## Features deprecated in the next version of SQL Server
The following [!INCLUDE [ssDEnoversion](../includes/ssdenoversion-md.md)] features aren't supported in a future version of [!INCLUDE [ssNoVersion](../includes/ssnoversion-md.md)]. Don't use these features in new development work, and modify applications that currently use these features as soon as possible. The **Feature name** value appears in trace events as the ObjectName and in performance counters and `sys.dm_os_performance_counters` as the instance name. The **Feature ID** value appears in trace events as the ObjectId.
| Category | Deprecated feature | Replacement | Feature name | Feature ID |
| --- | --- | --- | --- | --- |
| Backup and Restore | `RESTORE` { `DATABASE` | `LOG` } `WITH` [MEDIA]`PASSWORD` continues to be deprecated. `BACKUP` { `DATABASE` | `LOG` } `WITH PASSWORD` and `BACKUP` { `DATABASE` | `LOG` } `WITH MEDIAPASSWORD` are discontinued. | None | `BACKUP DATABASE` or `LOG WITH PASSWORD`
`BACKUP DATABASE` or `LOG WITH MEDIAPASSWORD` | 104
103 |
| Compatibility levels | Upgrade from version 100 ([!INCLUDE [sql2008-md](../includes/sql2008-md.md)] and [!INCLUDE [sql2008r2](../includes/sql2008r2-md.md)]). | When a [!INCLUDE [ssNoVersion](../includes/ssnoversion-md.md)] version goes out of [support](/lifecycle/products/?products=sql-server), the associated database compatibility level will be marked deprecated. However, we continue to support applications certified on any supported Database Compatibility Level as long as possible, to make the upgrades easier. For more information about compatibility levels, see [ALTER DATABASE (Transact-SQL) compatibility level](../t-sql/statements/alter-database-transact-sql-compatibility-level.md). | Database compatibility level 100 | 108 |
| Database objects | Ability to return result sets from triggers | None | Returning results from trigger | 12 |
| Encryption | Encryption using RC4 or RC4_128 is deprecated and will be removed in the next version. Decrypting RC4 and RC4_128 isn't deprecated. | Use another encryption algorithm such as AES. | Deprecated encryption algorithm | 253 |
| Hash algorithms | Using the MD2, MD4, MD5, SHA, and SHA1 is deprecated. | Use SHA2_256 or SHA2_512 instead. Older algorithms continue working, but they raise a deprecation event. | Deprecated hash algorithm | None |
| Remote servers | `sp_addremotelogin`
`sp_addserver`
`sp_dropremotelogin`
`sp_helpremotelogin`
`sp_remoteoption` | Replace remote servers by using linked servers. `sp_addserver` can only be used with the local option. | `sp_addremotelogin`
`sp_addserver`
`sp_dropremotelogin`
`sp_helpremotelogin`
`sp_remoteoption` | 70
69
71
72
73 |
| Remote servers | @@remserver | Replace remote servers by using linked servers. | None | None |
| Remote servers | `SET REMOTE_PROC_TRANSACTIONS` | Replace remote servers by using linked servers. | `SET REMOTE_PROC_TRANSACTIONS` | 110 |
| Table hints | HOLDLOCK table hint without parenthesis. | Use HOLDLOCK with parenthesis. | HOLDLOCK table hint without parenthesis | 167 |
## Features deprecated in a future version of SQL Server
The following [!INCLUDE [ssDEnoversion](../includes/ssdenoversion-md.md)] features are supported in the next version of [!INCLUDE [ssNoVersion](../includes/ssnoversion-md.md)], but will be deprecated in a later version. The specific version of [!INCLUDE [ssNoVersion](../includes/ssnoversion-md.md)] hasn't been determined.
| Category | Deprecated feature | Replacement | Feature name | Feature ID |
| --- | --- | --- | --- | --- |
| Compatibility levels | `sp_dbcmptlevel` | `ALTER DATABASE ... SET COMPATIBILITY_LEVEL`. For more information, see [ALTER DATABASE (Transact-SQL) compatibility level](../t-sql/statements/alter-database-transact-sql-compatibility-level.md). | sp_dbcmptlevel | 80 |
| Compatibility levels | Database compatibility level 110 and 120. | Plan to upgrade the database and application for a future release. However, we continue to support applications certified on any supported database compatibility level as long as possible, to make the upgrades easier. For more information about compatibility levels, see [ALTER DATABASE (Transact-SQL) compatibility level](../t-sql/statements/alter-database-transact-sql-compatibility-level.md). | Database compatibility level 110
Database compatibility level 120 | |
| XML | Inline XDR Schema Generation | The XMLDATA directive to the `FOR XML` option is deprecated. Use XSD generation in the case of `RAW` and `AUTO` modes. There's no replacement for the XMLDATA directive in EXPLICT mode. | XMLDATA | 181 |
| XML | `sys.sp_db_selective_xml_index` | `ALTER INDEX ... DISABLE`
For more information, see [ALTER INDEX](../t-sql/statements/alter-index-transact-sql.md). | [sys.sp_db_selective_xml_index](../relational-databases/system-stored-procedures/sp-db-selective-xml-index-transact-sql.md) | |
| Backup and restore | BACKUP { DATABASE | LOG } TO TAPE
BACKUP { DATABASE | LOG } TO *device_that_is_a_tape* | BACKUP { DATABASE | LOG } TO DISK
BACKUP { DATABASE | LOG } TO *device_that_is_a_disk* | BACKUP DATABASE or LOG TO TAPE | 235 |
| Backup and restore | `sp_addumpdevice 'tape'` | `sp_addumpdevice 'disk'` | `ADDING TAPE DEVICE` | 236 |
| Backup and restore | `sp_helpdevice` | `sys.backup_devices` | `sp_helpdevice` | 100 |
| Collations | Korean_Wansung_Unicode
Lithuanian_Classic
SQL_AltDiction_CP1253_CS_AS | None. These collations exist in [!INCLUDE [ssVersion2005](../includes/ssversion2005-md.md)], but aren't visible through fn_helpcollations. | Korean_Wansung_Unicode
Lithuanian_Classic
SQL_AltDiction_CP1253_CS_AS | 191
192
194 |
| Collations | Hindi
Macedonian | These collations exist in [!INCLUDE [ssVersion2005](../includes/ssversion2005-md.md)] and higher, but aren't visible through fn_helpcollations. Use Macedonian_FYROM_90 and Indic_General_90 instead. | Hindi
Macedonian | 190
193 |
| Collations | Azeri_Latin_90
Azeri_Cyrilllic_90 | Azeri_Latin_100
Azeri_Cyrilllic_100 | Azeri_Latin_90
Azeri_Cyrilllic_90 | 232
233 |
| Configuration | `SET ANSI_NULLS OFF` and `ANSI_NULLS OFF` database option
`SET ANSI_PADDING OFF` and `ANSI_PADDING OFF` database option
`SET CONCAT_NULL_YIELDS_NULL OFF` and `CONCAT_NULL_YIELDS_NULL OFF` database option
`SET OFFSETS` | None.
`ANSI_NULLS`, `ANSI_PADDING` and CONCAT_NULLS_YIELDS_NULL are always set to `ON`. `SET OFFSETS` will be unavailable. | `SET ANSI_NULLS OFF`
`SET ANSI_PADDING OFF`
`SET CONCAT_NULL_YIELDS_NULL OFF`
`SET OFFSETS`
`ALTER DATABASE SET ANSI_NULLS OFF`
`ALTER DATABASE SET ANSI_PADDING OFF`
`ALTER DATABASE SET CONCAT_NULL_YIELDS_NULL OFF` | 111
113
112
36
111
113
112 |
| Data types | `sp_addtype`
`sp_droptype` | `CREATE TYPE`
`DROP TYPE` | `sp_addtype`
`sp_droptype` | 62
63 |
| Data types | **timestamp** syntax for **rowversion** data type | **rowversion** data type syntax | `TIMESTAMP` | 158 |
| Data types | Ability to insert null values into **timestamp** columns. | Use a `DEFAULT` instead. | `INSERT NULL` into `TIMESTAMP` columns | 179 |
| Data types | 'text in row' table option | Use **varchar(max)**, **nvarchar(max)**, and **varbinary(max)** data types. For more information, see [sp_tableoption](../relational-databases/system-stored-procedures/sp-tableoption-transact-sql.md). | Text in row table option | 9 |
| Data types | Data types:
**text**
**ntext**
**image** | Use **varchar(max)**, **nvarchar(max)**, and **varbinary(max)** data types. | Data types: **text**, **ntext**, or **image** | 4 |
| Database management | `sp_attach_db`
`sp_attach_single_file_db` | `CREATE DATABASE` statement with the `FOR ATTACH` option. To rebuild multiple log files, when one or more have a new location, use the `FOR ATTACH_REBUILD_LOG` option. | `sp_attach_db`
sp_attach_single_file_db | 81
82 |
| Database objects | `CREATE DEFAULT`
`DROP DEFAULT`
sp_bindefault
`sp_unbindefault` | `DEFAULT` keyword in `CREATE TABLE` and `ALTER TABLE` | CREATE_DROP_DEFAULT
`sp_bindefault`
`sp_unbindefault` | 162
64
65 |
| Database objects | `CREATE RULE`
`DROP RULE`
`sp_bindrule`
`sp_unbindrule` | `CHECK` keyword in `CREATE TABLE` and `ALTER TABLE` | CREATE_DROP_RULE
`sp_bindrule`
`sp_unbindrule` | 161
66
67 |
| Database objects | `sp_change_users_login` | Use `ALTER USER`. | `sp_change_users_login` | 231 |
| Database objects | `sp_depends` | `sys.dm_sql_referencing_entities` and `sys.dm_sql_referenced_entities` | `sp_depends` | 19 |
| Database objects | `sp_renamedb` | `MODIFY NAME` in `ALTER DATABASE` | `sp_renamedb` | 79 |
| Database objects | `sp_getbindtoken` | Use MARS or distributed transactions. | `sp_getbindtoken` | 98 |
| Database options | `sp_bindsession` | Use MARS or distributed transactions. | `sp_bindsession` | 97 |
| Database options | `sp_resetstatus` | `ALTER DATABASE SET` { `ONLINE` | `EMERGENCY` } | `sp_resetstatus` | 83 |
| Database options | `TORN_PAGE_DETECTION` option of `ALTER DATABASE` | `PAGE_VERIFY TORN_PAGE_DETECTION` option of `ALTER DATABASE` | `ALTER DATABASE WITH TORN_PAGE_DETECTION` | 102 |
| DBCC | DBCC DBREINDEX | `REBUILD` option of `ALTER INDEX`. | DBCC DBREINDEX | 11 |
| DBCC | DBCC INDEXDEFRAG | `REORGANIZE` option of `ALTER INDEX` | DBCC INDEXDEFRAG | 18 |
| DBCC | DBCC SHOWCONTIG | `sys.dm_db_index_physical_stats` | DBCC SHOWCONTIG | 10 |
| DBCC | DBCC PINTABLE
DBCC UNPINTABLE | Has no effect. | DBCC [UN]PINTABLE | 189 |
| Extended properties | Level0type = 'type' and Level0type = 'USER' to add extended properties to level-1 or level-2 type objects. | Use Level0type = 'USER' only to add an extended property directly to a user or role.
Use Level0type = '`SCHEMA`' to add an extended property to level-1 types such as `TABLE` or VIEW, or level-2 types such as COLUMN or TRIGGER. For more information, see [sp_addextendedproperty](../relational-databases/system-stored-procedures/sp-addextendedproperty-transact-sql.md). | EXTPROP_LEVEL0`TYPE`
EXTPROP_LEVEL0USER | 13
14 |
| Extended stored procedure programming | srv_alloc
srv_convert
srv_describe
srv_getbindtoken
srv_got_attention
srv_message_handler
srv_paramdata
srv_paraminfo
srv_paramlen
srv_parammaxlen
srv_paramname
srv_paramnumber
srv_paramset
srv_paramsetoutput
srv_paramstatus
srv_paramtype
srv_pfield
srv_pfieldex
srv_rpcdb
srv_rpcname
srv_rpcnumber
srv_rpcoptions
srv_rpcowner
srv_rpcparams
srv_senddone
srv_sendmsg
srv_sendrow
srv_setcoldata
srv_setcollen
srv_setutype
srv_willconvert
srv_wsendmsg | Use CLR Integration instead. | `XP_API` | 20 |
| Extended stored procedure programming | `sp_addextendedproc`
`sp_dropextendedproc`
`sp_helpextendedproc` | Use CLR Integration instead. | `sp_addextendedproc`
`sp_dropextendedproc`
`sp_helpextendedproc` | 94
95
96 |
| Extended stored procedures | `xp_grantlogin`
`xp_revokelogin`
`xp_loginConfig` | Use `CREATE LOGIN`
Use `DROP LOGIN IsIntegratedSecurityOnly` argument of `SERVERPROPERTY` | `xp_grantlogin`
`xp_revokelogin`
`xp_loginconfig` | 44
45
59 |
| Functions | fn_get_sql | `sys.dm_exec_sql_text` | fn_get_sql | 151 |
| High availability | database mirroring | [!INCLUDE [ssHADR](../includes/sshadr-md.md)]
If your edition of [!INCLUDE [ssNoVersion](../includes/ssnoversion-md.md)] doesn't support [!INCLUDE [ssHADR](../includes/sshadr-md.md)], use log shipping. | DATABASE_MIRRORING | 267 |
| Index options | `sp_indexoption` | `ALTER INDEX` | `sp_indexoption` | 78 |
| Index options | `CREATE TABLE`, `ALTER TABLE`, or `CREATE INDEX` syntax without parentheses around the options. | Rewrite the statement to use the current syntax. | INDEX_OPTION | 33 |
| Instance options | `sp_configure` option 'allow updates' | System tables are no longer updatable. Setting has no effect. | `sp_configure` 'allow updates' | 173 |
| Instance options | `sp_configure` options:
'locks'
'open objects'
'set working set size' | Now automatically configured. Setting has no effect. | `sp_configure` 'locks'
`sp_configure` 'open objects'
`sp_configure` 'set working set size' | 174
175
176 |
| Instance options | `sp_configure` option 'priority boost' | System tables are no longer updatable. Setting has no effect. Use the Windows `start /high ... program.exe` option instead. | `sp_configure` 'priority boost' | 199 |
| Instance options | `sp_configure` option 'remote proc trans' | System tables are no longer updatable. Setting has no effect. | `sp_configure` 'remote proc trans' | 37 |
| Linked servers | Specifying the SQLOLEDB provider for linked servers. | [Microsoft OLE DB Driver for SQL Server](../connect/oledb/oledb-driver-for-sql-server.md) | SQLOLEDB for linked servers | 19 |
| Locking | `sp_lock` | `sys.dm_tran_locks` | `sp_lock` | 99 |
| Metadata | FILE_ID
INDEXKEY_PROPERTY | FILE_IDEX
`sys.index_columns` | FILE_ID
INDEXKEY_PROPERTY | 15
17 |
| Native XML Web Services | The `CREATE ENDPOINT` or `ALTER ENDPOINT` statement with the `FOR SOAP` option.
sys.endpoint_webmethods
sys.soap_endpoints | Use Windows Communications Foundation (WCF) or ASP.NET instead. | `CREATE`/`ALTER ENDPOINT`
sys.endpoint_webmethods
EXT_soap_endpoints
`sys.soap_endpoints` | 21
22
23 |
| Removable databases | `sp_certify_removable`
`sp_create_removable` | `sp_detach_db` | `sp_certify_removable`
`sp_create_removable` | 74
75 |
| Removable databases | `sp_dbremove` | `DROP DATABASE` | `sp_dbremove` | 76 |
| Security | The `ALTER LOGIN WITH SET CREDENTIAL` syntax | Replaced by the new `ALTER LOGIN ADD` and `DROP CREDENTIAL` syntax | `ALTER LOGIN WITH SET CREDENTIAL` | 230 |
| Security | `sp_addapprole`
`sp_dropapprole` | `CREATE APPLICATION ROLE`
`DROP APPLICATION ROLE` | `sp_addapprole`
`sp_dropapprole` | 53
54 |
| Security | `sp_addlogin`
`sp_droplogin` | `CREATE LOGIN`
`DROP LOGIN` | `sp_addlogin`
`sp_droplogin` | 39
40 |
| Security | `sp_adduser`
`sp_dropuser` | `CREATE USER`
`DROP USER` | `sp_adduser`
`sp_dropuser` | 49
50 |
| Security | `sp_grantdbaccess`
`sp_revokedbaccess` | `CREATE USER`
`DROP USER` | `sp_grantdbaccess`
`sp_revokedbaccess` | 51
52 |
| Security | `sp_addrole`
`sp_droprole` | `CREATE ROLE`
`DROP ROLE` | `sp_addrole`
`sp_droprole` | 56
57 |
| Security | `sp_approlepassword`
`sp_password` | `ALTER APPLICATION ROLE`
`ALTER LOGIN` | `sp_approlepassword`
`sp_password` | 55
46 |
| Security | `sp_changeobjectowner` | `ALTER SCHEMA` or `ALTER AUTHORIZATION` | `sp_changeobjectowner` | 58 |
| Security | `sp_control_dbmasterkey_password` | A master key must exist and password must be correct. | `sp_control_dbmasterkey_password` | 274 |
| Security | `sp_defaultdb`
`sp_defaultlanguage` | `ALTER LOGIN` | `sp_defaultdb`
`sp_defaultlanguage` | 47
48 |
| Security | `sp_denylogin`
`sp_grantlogin`
`sp_revokelogin` | `ALTER LOGIN DISABLE`
`CREATE LOGIN`
`DROP LOGIN` | `sp_denylogin`
`sp_grantlogin`
sp_revokelogin | 42
41
43 |
| Security | USER_ID | DATABASE_PRINCIPAL_ID | USER_ID | 16 |
| Security | `sp_srvrolepermission`
`sp_dbfixedrolepermission` | These stored procedures return information that was correct in [!INCLUDE [ssVersion2000](../includes/ssversion2000-md.md)]. The output doesn't reflect changes to the permissions hierarchy implemented in [!INCLUDE [sql2008-md](../includes/sql2008-md.md)]. For more information, see [Permissions of Fixed Server Roles](/previous-versions/sql/sql-server-2008/ms175892(v=sql.100)). | `sp_srvrolepermission`
`sp_dbfixedrolepermission` | 61
60 |
| Security | `GRANT ALL`
`DENY ALL`
`REVOKE ALL` | `GRANT`, `DENY`, and `REVOKE` specific permissions. | ALL Permission | 35 |
| Security | PERMISSIONS intrinsic function | Query `sys.fn_my_permissions` instead. | PERMISSIONS | 170 |
| Security | SETUSER | `EXECUTE AS` | SETUSER | 165 |
| Security | RC4 and `DESX` encryption algorithms | Use another algorithm such as AES. | `DESX` algorithm | 238 |
| `SET` options | `SET FMTONLY` | [sys.dm_exec_describe_first_result_set](../relational-databases/system-dynamic-management-views/sys-dm-exec-describe-first-result-set-transact-sql.md), [sys.dm_exec_describe_first_result_set_for_object](../relational-databases/system-dynamic-management-views/sys-dm-exec-describe-first-result-set-for-object-transact-sql.md), [sp_describe_first_result_set](../relational-databases/system-stored-procedures/sp-describe-first-result-set-transact-sql.md), and [sp_describe_undeclared_parameters](../relational-databases/system-stored-procedures/sp-describe-undeclared-parameters-transact-sql.md). | `SET FMTONLY` | 250 |
| Server Configuration Options | c2 audit option
default trace enabled option | [common criteria compliance enabled Server Configuration Option](configure-windows/common-criteria-compliance-enabled-server-configuration-option.md)
[Extended Events overview](../relational-databases/extended-events/extended-events.md) | `sp_configure` 'c2 audit mode'
`sp_configure` 'default trace enabled' | 252
253 |
| SMO classes | `Microsoft.SQLServer.Management.Smo.Information` class
`Microsoft.SQLServer. Management.Smo.Settings` class
`Microsoft.SQLServer.Management.Smo.DatabaseOptions` class
`Microsoft.SqlServer.Management.Smo.DatabaseDdlTrigger.NotForReplication` property | `Microsoft.SqlServer.Management.Smo.Server` class
`Microsoft.SqlServer.Management.Smo.Server` class
`Microsoft.SqlServer.Management.Smo.Database` class
None | None | None |
| SQL Server Agent | **net send** notification
Pager notification | E-mail notification
E-mail notification | None | None |
| [!INCLUDE [ssManStudioFull](../includes/ssmanstudiofull-md.md)] | Solution Explorer integration in [!INCLUDE [ssManStudioFull](../includes/ssmanstudiofull-md.md)] | | None | None |
| System Stored Procedures | `sp_db_increased_partitions` | None. Support for increased partitions is now available by default. | `sp_db_increased_partitions` | 253 |
| System tables | sysaltfiles
syscacheobjects
syscolumns
syscomments
sysconfigures
sysconstraints
syscurconfigs
sysdatabases
sysdepends
sysdevices
sysfilegroups
sysfiles
sysforeignkeys
sysfulltextcatalogs
sysindexes
sysindexkeys
syslockinfo
syslogins
sysmembers
sysmessages
sysobjects
sysoledbusers
sysopentapes
sysperfinfo
syspermissions
sysprocesses
sysprotects
sysreferences
sysremotelogins
sysservers
systypes
sysusers | Compatibility views. For more information, see [System Compatibility Views](../relational-databases/system-compatibility-views/system-compatibility-views-transact-sql.md).
**Important:** The compatibility views don't expose metadata for features that were introduced in [!INCLUDE [ssVersion2005](../includes/ssversion2005-md.md)]. We recommend that you upgrade your applications to use catalog views. For more information, see [System catalog views](../relational-databases/system-catalog-views/catalog-views-transact-sql.md). | sysaltfiles
syscacheobjects
syscolumns
syscomments
sysconfigures
sysconstraints
syscurconfigs
sysdatabases
sysdepends
sysdevices
sysfilegroups
sysfiles
sysforeignkeys
sysfulltextcatalogs
sysindexes
sysindexkeys
syslockinfo
syslogins
sysmembers
sysmessages
sysobjects
sysoledbusers
sysopentapes
sysperfinfo
syspermissions
sysprocesses
sysprotects
sysreferences
sysremotelogins
sysservers
systypes
sysusers | 141
None
133
126
146
131
147
142
123
144
128
127
130
122
132
134
143
140
119
137
125
139
145
157
121
153
120
129
138
136
135
124 |
| System tables | `sys.numbered_procedures`
`sys.numbered_procedure_parameters` | None | numbered_procedures
numbered_procedure_parameters | 148
149 |
| System functions | fn_virtualservernodes
fn_servershareddrives | `sys.dm_os_cluster_nodes`
`sys.dm_io_cluster_shared_drives` | fn_virtualservernodes
fn_servershareddrives | 155
156 |
| System views | `sys.sql_dependencies` | `sys.sql_expression_dependencies` | `sys.sql_dependencies` | 198 |
| Table compression | The use of the vardecimal storage format. | Vardecimal storage format is deprecated. Data compression in this version compresses decimal values and other data types. We recommend that you use data compression instead of the vardecimal storage format. | Vardecimal storage format | 200 |
| Table compression | Use of the `sp_db_vardecimal_storage_format` procedure. | Vardecimal storage format is deprecated. The [!INCLUDE [ssnoversion](../includes/ssnoversion-md.md)] data compression feature compresses decimal values as well as other data types. We recommend that you use data compression instead of the vardecimal storage format. | `sp_db_vardecimal_storage_format` | 201 |
| Table compression | Use of the `sp_estimated_rowsize_reduction_for_vardecimal` procedure. | Use data compression and the `sp_estimate_data_compression_savings` procedure instead. | `sp_estimated_rowsize_reduction_for_vardecimal` | 202 |
| Table hints | Specifying `NOLOCK` or `READUNCOMMITTED` in the `FROM` clause of an `UPDATE` or `DELETE` statement. | Remove the `NOLOCK` or `READUNCOMMITTED` table hints from the `FROM` clause. | `NOLOCK` or `READUNCOMMITTED` in `UPDATE` or `DELETE` | 1 |
| Table hints | Specifying table hints without using the `WITH` keyword. | Use `WITH`. | Table hint without `WITH` | 8 |
| Table hints | INSERT_HINTS | | INSERT_HINTS | 34 |
| Text pointers | WRITETEXT
UPDATETEXT
READTEXT | None | UPDATETEXT or WRITETEXT
READTEXT | 115
114 |
| Text pointers | TEXTPTR()
TEXTVALID() | None | TEXTPTR
TEXTVALID | 5
6 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | `::` function-calling sequence | Replaced by `SELECT FROM sys.()`.
For example, replace `SELECT * FROM ::fn_virtualfilestats(2,1)`with `SELECT * FROM sys.fn_virtualfilestats(2,1)`. | '::' function calling syntax | 166 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | Three-part and four-part column references. | Two-part names is the standard-compliant behavior. | More than two-part column name | 3 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | A string enclosed in quotation marks used as a column alias for an expression in a `SELECT` list:
'*string_alias*' = *expression* | *expression* [AS] *column_alias*
*expression* [AS] [*column_alias*]
*expression* [AS] "*column_alias*"
*expression* [AS] '*column_alias*'
*column_alias* = *expression* | String literals as column aliases | 184 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | Numbered procedures | None. Don't use. | ProcNums | 160 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | *table_name.index_name* syntax in `DROP INDEX` | *index_name* `ON` *table_name* syntax in `DROP INDEX`. | `DROP INDEX` with two-part name | 163 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | Not ending [!INCLUDE [tsql](../includes/tsql-md.md)] statements with a semicolon. | End [!INCLUDE [tsql](../includes/tsql-md.md)] statements with a semicolon (`;`). | None | None |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | `GROUP BY ALL` | Use custom case-by-case solution with `UNION` or derived table. | `GROUP BY ALL` | 169 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | `ROWGUIDCOL` as a column name in DML statements. | Use $rowguid. | `ROWGUIDCOL` | 182 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | IDENTITYCOL as a column name in DML statements. | Use $identity. | IDENTITYCOL | 183 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | Use of #, ## as temporary table and temporary stored procedure names. | Use at least one additional character. | '#' and '##' as the name of temporary tables and stored procedures | 185 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | Use of @ or @@ as [!INCLUDE [tsql](../includes/tsql-md.md)] identifiers. | Don't use @ or @@ or names that begin with @@ as identifiers. | '@' and names that start with '@@' as [!INCLUDE [tsql](../includes/tsql-md.md)] identifiers | 186. |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | Use of `DEFAULT` keyword as default value. | Don't use the word `DEFAULT` as a default value. | `DEFAULT` keyword as a default value | 187 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | Use of a space as a separator between table hints. | Use a comma to separate table hints. | Multiple table hints without comma | 168 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | The select list of an aggregate indexed view must contain COUNT_BIG (\*) in 90 compatibility mode | Use COUNT_BIG (\*). | Index view select list without COUNT_BIG(\*) | 2 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | The indirect application of table hints to an invocation of a multi-statement table-valued function (TVF) through a view. | None. | Indirect TVF hints | 7 |
| [!INCLUDE [tsql](../includes/tsql-md.md)] | `ALTER DATABASE` syntax:
`MODIFY FILEGROUP READONLY`
`MODIFY FILEGROUP READWRITE` | `MODIFY FILEGROUP READ_ONLY`
`MODIFY FILEGROUP READ_WRITE` | `MODIFY FILEGROUP READONLY`
`MODIFY FILEGROUP READWRITE` | 195
196 |
| Other | DB-Library
Embedded SQL for C | Although the [!INCLUDE [ssDE](../includes/ssde-md.md)] still supports connections from existing applications that use the DB-Library and Embedded SQL APIs, it doesn't include the files or documentation required to do programming work on applications that use these APIs. A future version of the [!INCLUDE [ssDEnoversion](../includes/ssdenoversion-md.md)] will drop support for connections from DB-Library or Embedded SQL applications. Don't use DB-Library or Embedded SQL to develop new applications. Remove any dependencies on either DB-Library or Embedded SQL when you modify existing applications. Instead of these APIs, use the SQLClient namespace or an API such as ODBC. The current version doesn't include the DB-Library DLL required to run these applications. To run DB-Library or Embedded SQL applications, you must have available the DB-Library DLL from [!INCLUDE [ssNoVersion](../includes/ssnoversion-md.md)] version 6.5, [!INCLUDE [ssNoVersion](../includes/ssnoversion-md.md)] 7.0, or [!INCLUDE [ssVersion2000](../includes/ssversion2000-md.md)]. | None | None |
| Tools | SQL Server Profiler for Trace Capture | Use Extended Events Profiler embedded in SQL Server Management Studio. | SQL Server Profiler | None |
| Tools | SQL Server Profiler for Trace Replay | [SQL Server Distributed Replay overview](../tools/distributed-replay/sql-server-distributed-replay.md) | SQL Server Profiler | None |
| Trace Management Objects | Microsoft.SqlServer.Management.Trace namespace (contains the APIs for SQL Server Trace and Replay objects) | Trace Configuration:
Trace Reading:
Trace Replay: None | | |
| SQL Trace stored procedures, functions, and catalog views | `sp_trace_create`
`sp_trace_setevent`
`sp_trace_setfilter`
`sp_trace_setstatus`
fn_trace_geteventinfo
fn_trace_getfilterinfo
fn_trace_getinfo
fn_trace_gettable
`sys.traces`
`sys.trace_events`
`sys.trace_event_bindings`
sys.trace_categories
sys.trace_columns
sys.trace_subclass_values | [Extended Events overview](../relational-databases/extended-events/extended-events.md) | `sp_trace_create`
`sp_trace_setevent`
`sp_trace_setfilter`
`sp_trace_setstatus`
fn_trace_geteventinfo
fn_trace_getfilterinfo
fn_trace_getinfo
fn_trace_gettable
`sys.traces`
`sys.trace_events`
`sys.trace_event_bindings`
`sys.trace_categories`
`sys.trace_columns`
`sys.trace_subclass_values` | 258
260
261
259
256
257 |
| Set options | `SET ROWCOUNT` for `INSERT`, `UPDATE`, and `DELETE` statements | `TOP` keyword | `SET ROWCOUNT` | 109 |
> [!NOTE]
> The cookie `OUTPUT` parameter for `sp_setapprole` is currently documented as **varbinary(8000)** which is the correct maximum length. However the current implementation returns **varbinary(50)**. If developers have allocated **varbinary(50)** the application might require changes if the cookie return size increases in a future release. Though not a deprecation issue this is mentioned in this topic because the application adjustments are similar. For more information, see [sp_setapprole](../relational-databases/system-stored-procedures/sp-setapprole-transact-sql.md).
## Related content
- [Discontinued Database Engine functionality in SQL Server](discontinued-database-engine-functionality-in-sql-server.md)
- [Deprecated Database Engine features in SQL Server 2017 (14.x)](deprecated-database-engine-features-in-sql-server-2017.md)