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

SQL Server から Azure SQL Database にデータベースを移行する際、事前に SQL Server データベースになんらかの設計変更が必要であると判明する場合があります。 この記事では、再構築を実行し、再構築が必要な根本的な原因を理解するうえで役立つガイダンスを提供します。 非互換性を検出してデータベースを Azure SQL Database に移行するには、Data Migration Assistant (DMA) を使用します。

概要

アプリケーションが使用する 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 でサポートされず、AlwaysOn 可用性グループに関連する動的管理ビューもサポートされていません。

SQL Database でサポートされる機能とサポートされない機能の一覧については、Azure SQL Database の機能の比較に関する記事を参照してください。 このページは、その記事を補完する内容となっており、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 LOGIN ステートメントと ALTER LOGIN ステートメントはサポートされますが、SQL Server で利用できるオプションの一部が提供されません。 データベースの移植性を高めるために、SQL Database は可能な限りログインの代わりに包含データベース ユーザーを使用することを推奨しています。 詳細については、「CREATE LOGIN」と「ALTER LOGIN」および「ログインとユーザーの管理」を参照してください。

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

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

  • システム オブジェクトの照合順序。
  • 接続関連:エンドポイント ステートメント。 SQL Database は Windows 認証をサポートしていませんが、Azure Active Directory 認証はサポートしています。 これには、Azure Active Directory とフェデレーションされた Active Directory プリンシパルの認証も含まれます。 詳細については、Azure Active Directory 認証を使用した SQL Database または Azure Synapse Analytics への接続に関する記事を参照してください。
  • 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 統合
  • セマンティック検索
  • サーバー資格情報:代わりにデータベース スコープの資格情報を使用してください。
  • サーバーレベルのアクセス許可: サーバーレベルのアクセス許可である GRANTREVOKEDENY はサポートされません。 一部のサーバーレベルのアクセス許可は、データベースレベルのアクセス許可に置き換えられるか、組み込みのサーバー ロールによって暗黙的に付与されます。 一部のサーバーレベルの 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 の文法、使用法、および使用例の詳細については、T-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 では使用できないことがわかります。 代わりにデータベース レベルのトリガーを使用します。

次のステップ

SQL Database でサポートされる機能とサポートされない機能の一覧については、Azure SQL Database の機能の比較に関する記事を参照してください。

Azure SQL Database への移行前に SQL Server データベースの互換性の問題を検出してデータベースを移行するには、Data Migration Assistant (DMA) を使用してください。