次の方法で共有


SQL Server と Azure SQL Database の T-SQL の相違点

SQL Server から Azure SQL Database に データベースを移行 するときに、SQL Server データベースを移行する前に、いくつかの再エンジニアリングが必要である場合があります。 この記事では、再構築を実行し、再構築が必要な根本的な原因を理解するうえで役立つガイダンスを提供します。 非互換性を検出し、データベースを Azure SQL Database に移行するには、 Azure Data Migration Service を使用します。

Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。

概要

アプリケーションで使用されるほとんどの Transact-SQL (T-SQL) 機能は、Microsoft SQL Server と Azure SQL Database の両方で完全にサポートされています。 たとえば、データ型、演算子、文字列、算術、論理、カーソル関数などのコア SQL コンポーネントは、SQL Server と SQL Database で同様に動作します。 ただし、DDL (データ定義言語) と DML (データ操作言語) 要素における T-SQL のいくつかの相違点により、T-SQL ステートメントとクエリは部分的にしかサポートされません (これについてはこの記事で後ほど説明します)。

さらに、Azure SQL Database はシステム データベースとオペレーティング システムへの依存関係から機能を分離するように設計されているため、まったくサポートされない機能や構文がいくつか存在します。 そのため、ほとんどのインスタンス レベルの機能は SQL Database ではサポートされていません。 T-SQL ステートメントとオプションは、インスタンスレベルのオプションやオペレーティング システムのコンポーネントを構成するか、またはファイル システムの構成を指定する場合は使用できません。 このような機能が必要な場合は、SQL Database や別の Azure 機能またはサービスから代わりの適切な機能を使用できることがあります。

たとえば、Azure SQL Database には高可用性が組み込まれています。 可用性グループに関連する T-SQL ステートメントは SQL Database ではサポートされておらず、Always On 可用性グループに関連する動的管理ビューもサポートされていません。

SQL Database でサポートおよびサポートされていない機能の一覧については、「 機能の比較: Azure SQL Database と Azure SQL Managed Instance」を参照してください。 このページは、その記事を補完する内容となっており、T-SQL ステートメントを中心に取り上げています。

部分的に異なる T-SQL 構文のステートメント

コア DDL ステートメントは使用できますが、ディスク上のファイル配置など、サポートされていない機能に関連する DDL ステートメント拡張機能はサポートされていません。

  • SQL Server では、CREATE DATABASE ステートメントと ALTER DATABASE ステートメントに 30 を超えるオプションがあります。 ステートメントには SQL Server にのみ適用されるファイルの配置、FILESTREAM、および Service Broker のオプションが含まれます。 移行する前に SQL Database にデータベースを作成する場合は、これは問題にならないかもしれませんが、データベースを作成する T-SQL コードを移行する場合は、 CREATE DATABASE (Azure SQL Database)CREATE DATABASE (SQL Server T-SQL) の SQL Server 構文を比較して、使用するすべてのオプションがサポートされていることを確認する必要があります。 また Azure SQL Database 用の CREATE DATABASE には、SQL Database にのみ適用されるサービス目標とエラスティック プール オプションがあります。
  • CREATE TABLE ステートメントと ALTER TABLE ステートメントの FILETABLE オプションと FILESTREAM オプションは、SQL Database ではサポートされない機能であり使用できません。
  • CREATE上の ALTER データベース内の対応するDROPmaster、およびステートメントを使用して、テーブル、ビュー、ストアド プロシージャなどのユーザー オブジェクトを作成、変更、または削除することはできません。
  • CREATE LOGIN ステートメントと ALTER LOGIN ステートメントはサポートされていますが、SQL Server で使用できるすべてのオプションは提供されていません。 データベースの移植性を高めるために、SQL Database は可能な限りログインの代わりに包含データベース ユーザーを使用することを推奨しています。 詳細については、 CREATE LOGINALTER LOGIN、および SQL Database、SQL Managed Instance、および Azure Synapse Analytics へのデータベース アクセスの承認に関するページを参照してください。

Azure SQL Database でサポートされない T-SQL 構文

機能の比較で説明されているサポートされていない機能に関連する T-SQL ステートメントに加えて 、Azure SQL Database と Azure SQL Managed Instance では、次のステートメントとステートメント グループはサポートされていません。 そのため、移行するデータベースが次の機能のいずれかを使用している場合は、アプリケーションの設計を変更してこれらの T-SQL の機能とステートメントを取り除きます。

  • システム オブジェクトの照合順序。
  • 接続関連:エンドポイント ステートメント。 SQL Database は Windows 認証をサポートしていませんが、Microsoft Entra 認証はサポートしています。 これには、 Microsoft Entra ID とフェデレーションされた Active Directory プリンシパルの認証が含まれます。 詳細については、 Azure SQL の Microsoft Entra 認証に関するページを参照してください。
  • 3 部構成または 4 部構成の名前を使用したデータベース間クエリとインスタンス間クエリ。 tempdb データベースおよび現在のデータベースを参照する 3 部構成の名前はサポートされます。 エラスティック クエリでは、他の MSSQL データベースにあるテーブルへの読み取り専用の参照がサポートされます。
  • データベース間での所有権の継承と TRUSTWORTHY データベース プロパティ。
  • EXECUTE AS LOGIN 代わりに EXECUTE AS USER を使用してください
  • 暗号化キーの拡張キー管理 (EKM)。 Transparent Data Encryption (TDE) カスタマー マネージド キー と Always Encrypted 列マスター キー は、Azure Key Vault に格納できます。
  • イベント: イベント通知、クエリ通知。
  • ファイル プロパティ: データベース ファイルの名前、配置、サイズなど、ファイルのプロパティは SQL Database によって自動的に管理されます。
  • 高可用性: 高可用性とデータベース復旧に関連した構文。これらは SQL Database によって管理されます。 これには、バックアップのための構文、復元、AlwaysOn、データベース ミラーリング、ログ配布、復旧モードが含まれます。
  • SQL Database では使用できない、スナップショット、トランザクション、マージ レプリケーションに関連する構文。 レプリケーション サブスクリプションはサポートされます。
  • 関数: fn_get_sqlfn_virtualfilestatsfn_virtualservernodes
  • インスタンスの構成: サーバー メモリ、ワーカー スレッド、CPU 関係、トレース フラグに関連した構文。 代わりにサービス レベルとコンピューティング サイズを使用します。
  • KILL STATS JOB
  • OPENQUERYOPENDATASOURCE、および 4 部構成の名前。
  • .NET Framework: 共通言語ランタイム (CLR) 統合
  • セマンティック検索
  • サーバー資格情報:代わりにデータベース スコープの資格情報を使用してください。
  • サーバー レベルのアクセス許可: サーバー レベルのアクセス許可の GRANTREVOKE、および DENY はサポートされていません。 一部のサーバーレベルのアクセス許可は、データベースレベルのアクセス許可に置き換えられるか、組み込みのサーバー ロールによって暗黙的に付与されます。 一部のサーバーレベルの DMV とカタログ ビューには、データベースレベルの同様のビューがあります。
  • SET REMOTE_PROC_TRANSACTIONS
  • SHUTDOWN
  • sp_addmessage
  • sp_configure および RECONFIGUREALTER DATABASE SCOPED CONFIGURATION はサポートされません。
  • sp_helpuser
  • sp_migrate_user_to_contained
  • SQL Server エージェント: SQL Server エージェントまたは msdb データベースに依存する構文: アラート、演算子、中央管理サーバー。 PowerShell などのスクリプトを代わりに使用します。
  • SQL Server 監査: 代わりに SQL Database 監査を使用してください。
  • SQL Server トレース。
  • トレース フラグ。
  • T-SQL デバッグ。
  • サーバー スコープ トリガーまたはログオン トリガー。
  • USE ステートメント: データベース コンテキストを別のデータベースに変更するには、そのデータベースへの接続を新たに作成する必要があります。

完全 T-SQL リファレンス

T-SQL 文法、使用法、および例の詳細については、「 Transact-SQL リファレンス (データベース エンジン)」を参照してください。

「適用先」タグについて

T-SQL リファレンスには、最近の全 SQL Server バージョンに関連した記事が含まれています。 記事のタイトルの下にアイコン バーがあり、MSSQL プラットフォームを一覧表示し、適用性を示しています。 たとえば、可用性グループは SQL Server 2012 で導入されました。 CREATE AVAILABILITY GROUP の記事では、そのステートメントが SQL Server (2012 以降) に適用されることが示されています。 このステートメントは、SQL Server 2008、SQL Server 2008 R2、Azure SQL Database、Azure Synapse Analytics、または Parallel Data Warehouse には適用されません。

場合によっては、記事にある一般的な項目を製品で使用できますが、製品間で若干の違いがあることがあります。 相違点は、必要に応じて記事の中で示されます。 たとえば CREATE TRIGGER の記事は、SQL Database に対応しています。 しかし、ALL SERVER オプションはサーバーレベルのトリガーを作成するためのもので、サーバーレベルのトリガーは SQL Database では使用できないことがわかります。 代わりにデータベース レベルのトリガーを使用します。