Compartir a través de

SQL Server与Azure SQL Database之间的 T-SQL 差异

将数据库从SQL Server迁移到Azure SQL Database时,你可能会发现SQL Server数据库需要进行一些重新工程,然后才能迁移数据库。 本文提供相关指南来帮助你执行此重新设计和了解重新设计是必需的基本原因。 若要检测不兼容情况并将数据库迁移到Azure SQL Database,请使用 Azure Database Migration Service

注意

Microsoft Entra ID以前称为Azure Active Directory(Azure AD)。

概述

应用程序使用的大多数Transact-SQL(T-SQL)功能在Microsoft SQL Server和Azure SQL Database中都完全受支持。 例如,核心 SQL 组件(如数据类型、运算符、字符串、算术、逻辑函数和游标函数)在 SQL Server 和 SQL 数据库中的工作方式相同。 但是,DDL(数据定义语言)和 DML(数据操作语言)元素中的一些 T-SQL 差异导致存在仅部分受支持的 T-SQL 语句和查询(我们会在本文后面的内容中介绍)。

此外,还完全不支持某些功能和语法,因为Azure SQL Database旨在将功能与系统数据库和作系统上的依赖项隔离开来。 因此,SQL 数据库不支持大多数实例级功能。 T-SQL 语句和选项在配置实例级选项、操作系统组件或指定文件系统配置时不可用。 如果需要此类功能,通常可以通过 SQL 数据库或其他Azure功能或服务以某种方式使用适当的替代方法。

例如,高可用性内置于Azure SQL Database中。 SQL 数据库不支持与可用性组相关的 T-SQL 语句,也不支持与 Always On 可用性组相关的动态管理视图。

有关 SQL 数据库支持和不支持的功能的列表,请参阅 Features 比较:Azure SQL Database和 Azure SQL Managed Instance。 此页对该篇文章进行了补充,并重点介绍了 T-SQL 语句。

具有部分差异的 T-SQL 语法语句

核心 DDL 语句可用,但与不受支持功能相关的 DDL 语句扩展(如磁盘上的文件放置)不受支持。

  • 在 SQL Server 中,CREATE DATABASEALTER DATABASE 语句具有三十多个选项。 这些语句包括文件放置、FILESTREAM 和服务代理选项,这些选项仅适用于SQL Server。 在迁移之前,如果在 SQL 数据库中创建数据库,这并不重要, 但是,如果要迁移创建数据库的 T-SQL 代码,则应将 CREATE DATABASE (Azure SQL Database)CREATE DATABASE(SQL Server T-SQL)以确保支持使用的所有选项。 CREATE DATABASE for Azure SQL Database 还具有仅适用于 SQL 数据库的服务目标和弹性池选项。
  • CREATE TABLEALTER TABLE 语句具有不能在 SQL 数据库上使用的 FILETABLEFILESTREAM 选项,因为这些功能不受支持。
  • 不支持使用CREATE数据库中的相应ALTERDROP语句master创建、更改或删除用户对象(如表、视图或存储过程)。
  • 支持 CREATE LOGINALTER LOGIN 语句,但不提供SQL Server中的所有可用选项。 要使数据库更易于移植,SQL 数据库建议尽可能使用包含的数据库用户,而不是使用登录名。 有关详细信息,请参阅 CREATE LOGINALTER LOGINAuthorize SQL 数据库、SQL Managed Instance和 Azure Synapse Analytics

Azure SQL Database不支持 T-SQL 语法

除了与 Features 比较中所述的功能相关的 T-SQL 语句:Azure SQL Database和 Azure SQL Managed Instance 之外,不支持以下语句和语句组。 因此,如果要迁移的数据库使用以下任一功能,请重新设计应用程序以消除这些 T-SQL 功能和语句。

  • 系统对象的排序规则。
  • 相关连接:终结点语句。 SQL 数据库不支持Windows authentication,但支持Microsoft Entra身份验证。 这包括与 Microsoft Entra ID 联合Active Directory主体的身份验证。 有关详细信息,请参阅 Microsoft Entra 身份验证,了解 Azure SQL
  • 使用由三部分或四部分构成的名称的跨数据库和跨实例查询。 支持引用 tempdb 数据库和当前数据库的由三部分构成的名称。 弹性查询支持对其他 MSSQL 数据库中的表进行只读引用。
  • 跨数据库所有权链接和 TRUSTWORTHY 数据库属性。
  • EXECUTE AS LOGIN。 请改用 EXECUTE AS USER
  • 加密密钥的可扩展密钥管理 (EKM)。 透明数据加密(TDE)customer 托管密钥和 Always Encrypted 列式主密钥可以存储在Azure Key Vault中。
  • 事件处理:事件通知、查询通知。
  • 文件属性:与数据库文件名、位置、大小和其他由 SQL 数据库自动管理的文件属性相关的语法。
  • 高可用性:与高可用性和数据库恢复相关的语法,由 SQL 数据库管理。 这包括备份、还原、Always On、数据库镜像、日志传送、恢复模型的语法。
  • 与快照、事务和合并复制相关的语法,在 SQL 数据库中不可用。 支持复制订阅
  • 函数:fn_get_sqlfn_virtualfilestatsfn_virtualservernodes
  • 实例配置:与服务器内存、工作线程、CPU 相关性、跟踪标志相关的语法。 请改用服务层级和计算大小。
  • KILL STATS JOB
  • OPENQUERYOPENDATASOURCE 和由四部分构成的名称。
  • .NET框架:公共语言运行时(CLR)集成
  • 语义搜索
  • 服务器凭据:改用数据库范围的凭据
  • 服务器级权限:服务器级权限 GRANTREVOKEDENY 不受支持。 某些服务器级权限已替换为数据库级权限,或由内置服务器角色隐式授予。 一些服务器级 DMV 和目录视图具有类似的数据库级视图。
  • SET REMOTE_PROC_TRANSACTIONS
  • SHUTDOWN
  • sp_addmessage
  • sp_configureRECONFIGUREALTER DATABASE SCOPED CONFIGURATION 受支持。
  • sp_helpuser
  • sp_migrate_user_to_contained
  • SQL Server Agent:依赖于SQL Server Agent或 msdb 数据库的语法:警报、、中央管理服务器。 改用脚本,如 PowerShell。
  • SQL Server审核:改用 SQL 数据库 auditing
  • SQL Server跟踪。
  • 跟踪标志。
  • T-SQL 调试。
  • 服务器作用域或登录触发器。
  • USE 语句:要将数据库上下文更改为不同的数据库,必须与该数据库建立新连接。

完整的 T-SQL 参考

有关 T-SQL 语法、用法和示例的详细信息,请参阅 Transact-SQL 参考(Database Engine)

有关“适用于”标记

T-SQL 参考包含与所有最新SQL Server版本相关的文章。 文章标题下面有一个图标栏,其中列出了 MSSQL 平台,并指明了适用性。 例如,SQL Server 2012 中引入了可用性组。 CREATE AVAILABILITY GROUP 文章指出,该语句适用于 SQL Server(从 2012 年开始)。 该语句不适用于 2008、SQL Server 2008 R2、Azure SQL Database、Azure Synapse Analytics 或 Parallel Data Warehouse SQL Server。

在某些情况下,产品中可能使用了某篇文章的常规主旨,但产品之间存在细微差异。 在适当的情况下,我们会在文章的中间位置指出该差异。 例如,CREATE TRIGGER 文章在 SQL 数据库中可用。 但服务器级触发器的 ALL SERVER 选项指示不能在 SQL 数据库中使用服务器级触发器。 请改用数据库级触发器。