SQL Server 2014 におけるデータベース エンジン機能の重大な変更

このトピックでは、SQL Server 2014 データベース エンジン以前のバージョンの SQL Server での破壊的変更について説明します。 これらの変更によって、以前のバージョンの SQL Serverに基づくアプリケーション、スクリプト、または機能が使用できなくなる場合があります。 この問題は、アップグレードするときに発生することがあります。 詳細については、「 Use Upgrade Advisor to Prepare for Upgrades」を参照してください。

SQL Server 2014 における重大な変更

新しい事項はありません。

SQL Server 2012 における重大な変更

Transact-SQL

機能 説明
NEXT という名前の列またはテーブルから選択している シーケンスでは、ANSI 標準の NEXT VALUE FOR 関数が使用されます。 テーブルまたは列の名前が NEXT で、テーブルまたは列の別名が VALUE の場合、ANSI 標準 AS を省略すると、結果のステートメントでエラーが発生する可能性があります。 問題を回避するには、ANSI 標準の AS キーワードを含めます。 たとえば、SELECT NEXT VALUE FROM TableSELECT NEXT AS VALUE FROM Table に書き直す必要があり、SELECT Col1 FROM NEXT VALUESELECT Col1 FROM NEXT AS VALUE に書き直す必要があります。
PIVOT 演算子 PIVOT 演算子は、データベースの互換性レベルが 110 に設定されている場合、再帰共通テーブル式 (CTE) クエリでは許可されません。 クエリを書き直すか、または互換性レベルを 100 以下に変更してください。 再帰 CTE クエリで PIVOT を使用すると、グループごとに複数の行がある場合に、誤った結果が返されます。
sp_setapprole と sp_unsetapprole の cookie OUTPUT パラメーター sp_setapprole は、現在、正しい最大長である として varbinary(8000) 文書化されています。 ただし、現在の実装では varbinary(50) を返します。 今後のリリースで Cookie の戻りサイズが大きくなると、アプリケーションが正常に動作し続けるために、アプリケーションは引き続き予約 varbinary(8000) する必要があります。 詳細については、「sp_setapprole (Transact-SQL)」を参照してください。
EXECUTE AS EXECUTE AS のクッキーの OUTPUT パラメーターは現在、適切な最大長である varbinary(8000) としてドキュメントに記載されています。 ただし、現在の実装では varbinary(100) を返します。 今後のリリースで Cookie の戻りサイズが大きくなると、アプリケーションが正常に動作し続けるために、アプリケーションは引き続き予約 varbinary(8000) する必要があります。 詳細については、「 EXECUTE AS (Transact-SQL)」を参照してください。
sys.fn_get_audit_file 関数 ユーザー定義の監査イベントをサポートするために、2 つの列 ( user_defined_event_idとuser_defined_information) が追加されました。 名前で列を選択しないアプリケーションは、予想よりも多くの列を返す場合があります。 名前で列を選択するか、これらの追加列を受け入れるようにアプリケーションを調整してください。
WITHIN 予約キーワード WITHIN は予約キーワードになりました。 "within" という名前のオブジェクトまたは列への参照は失敗します。 オブジェクトまたは列の名前を変更するか、または角かっこや引用符を使用して名前を区切ってください。 たとえば、SELECT * FROM [within] のようにします。
time または datetime2 型の計算列に対する CAST および CONVERT 操作 以前のバージョンの SQL Server では、計算列式でいずれかの型が使用されている場合を除き、データ型と datetime2 データ型に対する time CAST および CONVERT 操作の既定のスタイルは 121 です。 計算列の場合、既定のスタイルは 0 です。 この動作は、計算列が作成されるとき、自動パラメーター化を含むクエリで使用されるとき、または制約の定義で使用されるときに、計算列に影響を与えます。

互換性レベル 110 では、time および datetime2 データ型に対する CAST および CONVERT 操作の既定のスタイルは常に 121 です。 クエリが古い動作に依存する場合は、110 より小さい互換性レベルを使用するか、または影響を受けるクエリで 0 スタイルを明示的に指定してください。

データベースを互換性レベル 110 にアップグレードしても、ディスクに格納されているユーザー データは変更されません。 このようなデータは手動で適切に修正する必要があります。 たとえば、SELECT INTO を使用して、前に説明した計算列の式を含むソースからテーブルを作成した場合は、計算列の定義自体ではなく、(スタイル 0 を使用する) データが格納されます。 このようなデータは、手動で更新してスタイル 121 に一致させる必要があります。
ALTER TABLE ALTER TABLE ステートメントでは、2 部構成 (schema.object) のテーブル名だけを使用できます。 次の形式を使用してテーブル名を指定すると、コンパイル時にエラー 117 で失敗するようになりました。

server.database.schema.table

.database.schema.table

..schema.table

以前のバージョンでは、server.database.schema.table という形式を指定すると、エラー 4902 が返されました。 .database.schema.table または ..schema.table という形式を指定すると、成功しました。 問題を解決するには、4 部構成のプレフィックスの使用を削除してください。
メタデータの参照 FOR BROWSE または SET NO_BROWSETABLE ON を使用してビューをクエリすると、基になるオブジェクトのメタデータではなく、ビューのメタデータが返されるようになりました。 この動作は現在、他のメタデータ参照方法と一致します。
SOUNDEX データベース互換性レベル 110 では、SOUNDEX 関数は新しいルールを実装します。このため、この関数により計算される値が、110 未満の互換性レベルで計算された値と異なる結果になる場合があります。 互換性レベル 110 へのアップグレード後に、SOUNDEX 関数を使用するインデックス、ヒープ、または CHECK 制約の再構築が必要になる場合があります。 詳細については、「SOUNDEX (Transact-SQL)」を参照してください。
失敗した DML ステートメントの行数メッセージ SQL Server 2012 では、データベース エンジンは、DML ステートメントが失敗したときに RowCount: 0 を使用して TDS DONE トークンをクライアントに一貫して送信します。 以前のバージョンの SQL Server では、失敗した DML ステートメントが TRY-CATCH ブロックに含まれていて、データベース エンジンによって自動パラメーター化されるか、TRY-CATCH ブロックが失敗したステートメントと同じレベルにない場合に、-1 の正しくない値がクライアントに送信されます。 たとえば、TRY-CATCH ブロックがストアド プロシージャを呼び出し、そのプロシージャ内の DML ステートメントが失敗した場合、クライアントは -1 という間違った値を受け取ります。

この不適切な動作に依存するアプリケーションは失敗します。
SERVERPROPERTY ('Edition') SQL Server 2012 のインスタンスのインストール済み製品エディション。 このプロパティの値を使用すると、インストールされている製品でサポートされている CPU の最大数など、機能や制限を確認できます。

インストールされている Enterprise エディションに基づいて、'Enterprise Edition' または 'Enterprise Edition: Core ベースのライセンス' を返すことができます。 Enterprise エディションは、SQL Server の 1 つのインスタンスによる最大コンピューティング容量に基づいて区別されます。 SQL Server 2012 のコンピューティング容量制限の詳細については、「SQL Server の エディション別のコンピューティング容量制限」を参照してください。
CREATE LOGIN パスワード' HASHED オプションはCREATE LOGIN WITH PASSWORD = '、SQL Server 7 以前で作成されたハッシュでは使用できません。
datetimeoffset の CAST 操作と CONVERT 操作 日付型と時刻型を datetimeoffset に変換するときにサポートされているスタイルは、0 または 1 のみです。 他のすべての変換スタイルでは 9809 が返されます。 たとえば、次のコードではエラー 9809 が返されます。

SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107);

動的管理ビュー

表示 説明
sys.dm_exec_requests command 列が nvarchar(16) から nvarchar(32) に変更されました。
sys.dm_os_memory_cache_counters 次の列の名前が変更されました。

single_pages_kbは次のとおりです。
pages_kb

multi_pages_kb
現在: pages_in_use_kb
sys.dm_os_memory_cache_entries 列pages_allocated_count列の名前がpages_kbされました。
sys.dm_os_memory_clerks 列multi_pages_kbが削除されました。

列single_pages_kb列の名前がpages_kbされました。
sys.dm_os_memory_nodes 次の列の名前が変更されました。

single_pages_kbは次のとおりです。
pages_kb

multi_pages_kbは次のとおりです。
foreign_committed_kb
sys.dm_os_memory_objects 以下の列の名前が変更されました。

pages_allocated_countは次のとおりです。
pages_in_bytes

max_pages_allocated_countは次のとおりです:max_pages_in_bytes
sys.dm_os_sys_info 次の列の名前が変更されました。

physical_memory_in_bytesは次のとおりです。
physical_memory_kb

bpool_commit_targetは次のとおりです。
committed_target_kb

bpool_visibleは次のとおりです。
visible_target_kb

virtual_memory_in_bytesは次のとおりです。
virtual_memory_kb

bpool_commitedは次のとおりです。
committed_kb
sys.dm_os_workers ロケール列は削除されました。

カタログ ビュー

表示 説明
sys.data_spaces

sys.partition_schemes

sys.filegroups

sys.partition_functions
sys.data_spaces と sys.partition_functions に、新しい列 (is_system) が追加されました (sys.partition_schemes と sys.filegroups は、sys.data_spaces の列を継承します)。

この列では、値 1 は、そのオブジェクトがフルテキスト インデックス フラグメントに使用されることを示します。

sys.partition_functions、sys.partition_schemes、および sys.filegroups では、この新しい列は末尾の列ではありません。 これらのカタログ ビューから返される列の順序に依存する既存のクエリを修正してください。

SQL CLR データ型 (geometry、geography、および hierarchyid)

空間データ型と hierarchyid 型を含むアセンブリ Microsoft.SqlServer.Types.dllは、バージョン 10.0 からバージョン 11.0 にアップグレードされました。 このアセンブリを参照するカスタム アプリケーションは、次の条件に該当する場合に失敗します。

  • SQL Server 2008 R2 がインストールされているコンピューターから、SQL Server 2014 のみがインストールされているコンピューターにカスタム アプリケーションを移動すると、SqlTypes アセンブリの参照先バージョン 10.0 が存在しないため、アプリケーションは失敗します。 この場合、次のエラー メッセージが返されることがあります: "Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified."

  • SqlTypes アセンブリ バージョン 11.0 を参照し、バージョン 10.0 もインストールされている場合は、次のエラー メッセージが表示されることがあります。"System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'."

  • .NET 3.5、4、または 4.5 を対象とするカスタム アプリケーションから SqlTypes アセンブリ バージョン 11.0 を参照すると、SqlClient by design によってバージョン 10.0 のアセンブリが読み込まれるため、アプリケーションは失敗します。 このエラーは、アプリケーションが次のいずれかのメソッドを呼び出したときに発生します。

    • GetValue クラスの SqlDataReader メソッド

    • GetValues クラスの SqlDataReader メソッド

    • SqlDataReader クラスの角かっこインデックス演算子 []

    • ExecuteScalar クラスの SqlCommand メソッド

この問題は、次のいずれかの方法を使用して回避できます。

  • 次の例に示すように、上記の Get メソッドではなく メソッドをGetSqlBytes呼び出して CLR SQL Serverシステム型を取得することで、コードでこの問題を回避できます。

    string query = "SELECT [SpatialColumn] FROM [SpatialTable]";  
          using (SqlConnection conn = new SqlConnection("..."))  
          {  
                SqlCommand cmd = new SqlCommand(query, conn);  
    
                conn.Open();  
                SqlDataReader reader = cmd.ExecuteReader();  
    
                while (reader.Read())  
                {  
                      // In version 11.0 only  
                      SqlGeometry g =   
    SqlGeometry.Deserialize(reader.GetSqlBytes(0));  
    
                      // In version 10.0 or 11.0  
                      SqlGeometry g2 = new SqlGeometry();  
                      g.Read(new BinaryReader(reader.GetSqlBytes(0).Stream));  
                }  
          }  
    
  • この問題を回避するには、アプリケーション構成ファイル内でアセンブリのリダイレクトを使用します。次に例を示します。

    <runtime>  
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">  
        ...  
        <dependentAssembly>  
            <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />  
            <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />  
        </dependentAssembly>  
        ...  
    </assemblyBinding>  
    <runtime>  
    
  • この問題を回避するには、接続文字列内で、"Type System Version" 属性の値を "SQL Server 2012" と指定することにより、SqlClient がバージョン 11.0 のアセンブリを読み込むようにします。 この接続文字列属性は、.NET 4.5 以上でのみ使用可能です。

  • assemblyBinding タグは runtime タグの下に含める必要があります。

AWE のサポート

32 ビット Address Windowing Extensions (AWE) のサポートは廃止されました。 これにより、32 ビット オペレーティング システム上でのパフォーマンスが低下する可能性があります。 大量のメモリを使用するインストールについては、64 ビット オペレーティング システムに移行してください。

サロゲート対応の XQuery 関数

W3C 勧告では、XQuery 関数および演算子は、上位 Unicode 文字を表すサロゲート ペアを UTF-16 エンコードの単一グリフとしてカウントするよう要求されています。 ただし、2012 年SQL Serverより前のバージョンのSQL Serverでは、文字列関数はサロゲート ペアを 1 文字として認識しませんでした。 文字列の長さの計算や部分文字列の抽出など、一部の文字列操作で正しくない結果が返されました。 SQL Server 2012 では、UTF-16 とサロゲート ペアの正しい処理が完全にサポートされるようになりました。

SQL Serverの XML データ型では、整形式のサロゲート ペアのみが許可されます。 ただし、一部の関数では、一定の状況下において、未定義または予期しない結果が依然として返されることがあります。これは、無効または部分的なサロゲート ペアが XQuery 関数に文字列値として渡される可能性があるためです。 SQL Serverで XQuery を使用する場合は、次の方法で文字列値を生成することを検討してください。

  • 定数文字列値をバイナリ値として提供する。 この方法を使用した場合、無効または部分的なサロゲート ペアが渡される可能性は残ります。

  • 定数文字列値を、文字エンティティを提供することによって提供する。 この方法を使用した場合、無効なサロゲート ペアを渡すことはできなくなります。 XQuery 関数では、高レベルの文字に単一の文字エンティティを使用する必要があります。 これらの関数では、サロゲート ペア文字用の文字エンティティが提供された場合にエラーが発生します。

  • sql:column または sql:variable を使用して外部値インポートします。 これらの方法を使用した場合、無効または部分的なサロゲート ペアが使用される可能性は残ります。

影響を受ける XQuery 関数と演算子

次の XQuery 関数と演算子は、SQL Server 2012 で UTF-16 サロゲート ペアを正しく処理するようになりました。

  • fn:string-length。 ただし、無効なサロゲート ペアまたは部分サロゲート ペアが引数として渡された場合、 文字列長 の動作は未定義です。

  • fn:substring

  • fn:contains。 ただし、部分サロゲート ペアが値として渡された場合、 が 含 まれていると、正しい形式のサロゲート ペアに含まれる部分サロゲート ペアが見つかる可能性があるため、予期しない結果が返される可能性があります。

  • fn:concat。 ただし、部分サロゲート ペアが値として渡された場合、 concat は正しくないサロゲート ペアまたは部分サロゲート ペアを生成する可能性があります。

  • 比較演算子と order by 句。 比較演算子には、+、、<=><、=、>=、、、lteqgtle、および がge含まれます。

システム プロシージャへの分散クエリ呼び出し

一部のシステム プロシージャへの分散クエリ呼び出しOPENQUERYは、2012 SQL Server サーバー間で呼び出されると失敗します。 これは、データベース エンジンがプロシージャのメタデータを検出できない場合に発生します。 たとえば、SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo') のようにします。

分離レベルと sp_reset_connection

接続の分離レベルは、クライアント ドライバーによって次のように処理されます。

  • すべてのネイティブのドライバー (SNAC、MDAC、ODBC) では、sp_reset_connection において (アプリケーション設定に基づいて) 分離レベルが設定されます。

  • ADO.NET では、実際にはプールから取得する接続によって (かつアプリケーションが異なる分離レベルを使用するかに応じて)、ランダムな分離レベルが得られます。 ADO.NET のプールは、内部的かつ透過的に接続をリサイクルできます。プールから何が出てくるかを予測することはできません。

  • JDBC Driver では、動作は ADO.NET と同じになります。

    アプリケーションは、必要なものを取得するために接続を開いた後、常に明示的に分離レベルを設定する必要があります。

    JDBC の接続はプールすることができます。そのため、アプリケーションがランダムな分離レベルを取得しても、それについて認識されていない場合があります。

下位互換性を保持するため、この新しい動作は TDS 7.4 以降の最近使用したクライアントに対してのみ適用されます。

Backward Compatibility

新しい動作は互換性レベルに依存します

次の関数と演算子は、互換性レベルが 110 以上の場合にのみ、上記の新しい動作を示します。

  • fn:contains

  • fn:concat

  • 比較演算子と order by

新しい動作は、関数の既定の名前空間 URI に依存します

次の関数は、既定の名前空間 URI が最終的な推奨事項の名前空間 () http://www.w3.org/2005/xpath-functionsに対応する場合にのみ、上記の新しい動作を示しています。 互換性レベルが 110 以上の場合、既定SQL Server 2012 では、既定の関数名前空間がこの名前空間にバインドされます。 ただし、これらの関数は、この名前空間が互換性レベルにかかわらず使用される場合にのみ、新しい動作を示します。

  • fn:string-length

  • fn:substring

SQL Server 2008/SQL Server 2008R2 における重大な変更

このセクションでは、SQL Server 2008 で導入された破壊的変更について説明します。 SQL Server 2008 R2 では変更は行われませんでした。

照合順序

機能 説明
新しい照合順序 SQL Server 2008 では、Windows Server 2008 で提供される照合順序と完全に一致する新しい照合順序が導入されています。 この 80 個の新しい照合順序は、言語面での精度が向上しており、*_100 というバージョン参照で示されます。 サーバーまたはデータベースに新しい照合順序を選択する場合は、古いクライアント ドライバーを使用するクライアントではその照合順序が認識されない可能性があることに注意してください。 照合順序が認識されないと、アプリケーションはエラーを返して失敗する場合があります。 次の解決策を検討してください。

クライアント オペレーティング システムをアップグレードして、基になるシステムの照合順序を更新する。

クライアントにデータベース クライアント ソフトウェアがインストールされている場合、データベース クライアント ソフトウェアにサービスの更新プログラムを適用する。

クライアントのコード ページにマップする既存の照合順序を選択する。

共通言語ランタイム (CLR)

機能 説明
CLR アセンブリ データベースを SQL Server 2008 にアップグレードすると、Microsoft.SqlServer.Types新しいデータ型をサポートするアセンブリが自動的にインストールされます。 アップグレード アドバイザールールは、競合する名前を持つユーザーの種類またはアセンブリを検出します。 Upgrade Advisor は、競合するアセンブリの名前を変更し、競合する型の名前を変更するか、コード内で 2 部構成の名前を使用してその既存のユーザーの種類を参照することをお勧めします。

データベースのアップグレードで、競合する名前のユーザー アセンブリが検出されると、そのアセンブリの名前が自動的に変更され、データベースが疑わしいモードになります。

アップグレード時に競合する名前を持つユーザー型が検出された場合、特別な処理は実行されません。 アップグレード後は、古いユーザー型と新しいシステム型の両方が存在することになります。 ユーザー型は、2 つの部分から構成される名前を介してのみ使用できます。
CLR アセンブリ SQL Server 2008 では、グローバル アセンブリ キャッシュ (GAC) のライブラリ.NET Framework更新する 3.5 SP1 がインストールされます。 SQL Server データベースにサポートされていないライブラリが登録されている場合は、SQL Server アプリケーションが SQL Server 2008 にアップグレードした後に動作しなくなる可能性があります。 これは、GAC 内のライブラリのサービスまたはアップグレードによって、SQL Server内のアセンブリが更新されないためです。 アセンブリがSQL Server データベースと GAC の両方に存在する場合、アセンブリの 2 つのコピーが完全に一致している必要があります。 一致しない場合は、CLR 統合によってアセンブリが使用されるときにエラー SQL Server発生します。 詳細については、「サポートされている.NET Framework ライブラリ」を参照してください。

データベースをアップグレードした後、ALTER ASSEMBLY ステートメントを使用して、SQL Server データベース内のアセンブリのコピーをサービスまたはアップグレードします。 詳細については、 サポート技術情報の記事 949080 を参照してください。

サポートされていない .NET Framework ライブラリをアプリケーションで使用しているかどうかを検出するには、データベースで次のクエリを実行します。

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';
CLR ルーチン CLR ユーザー定義関数、ユーザー定義集計、またはユーザー定義型 (UDT) 内で偽装を使用すると、SQL Server 2008 にアップグレードした後、アプリケーションがエラー 6522 で失敗する可能性があります。 次のシナリオは、SQL Server 2005 では成功しますが、SQL Server 2008 では失敗します。 それぞれのシナリオに解決策があります。

偽装を使用する CLR ユーザー定義関数、ユーザー定義集計、または UDT メソッドには、型 nvarchar(max)varchar(max)varbinary(max)、、imagentexttext、または大きな UDT のパラメーターがあり、メソッドに DataAccessKind.Read 属性がありません。 この問題を解決するには、 メソッドに DataAccessKind.Read 属性を追加し、アセンブリを再コンパイルして、ルーチンとアセンブリを再デプロイします。

偽装を実行する Init メソッドを持つ CLR テーブル値関数。 この問題を解決するには、 メソッドに DataAccessKind.Read 属性を追加し、アセンブリを再コンパイルして、ルーチンとアセンブリを再デプロイします。

偽装を実行する FillRow メソッドを持つ CLR テーブル値関数。 この問題を解決するには、 FillRow メソッドから偽装を削除します。 FillRow メソッドを使用して外部リソースにアクセスしないでください。 代わりに、 Init メソッドから外部リソースにアクセスします。

動的管理ビュー

表示 説明
sys.dm_os_sys_info cpu_ticks_in_ms 列と sqlserver_start_time_cpu_ticks 列を削除しました。
sys.dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grants resource_semaphore_id列は、SQL Server 2008 では一意の ID ではありません。 この変更は、クエリの実行のトラブルシューティングに影響する可能性があります。 詳細については、「 sys.dm_exec_query_resource_semaphores (Transact-SQL)」を参照してください。

エラーとイベント

機能 説明
ログイン エラー SQL Server 2005 では、WINDOWS 認証のみを使用するように構成されたサーバーに接続するために SQL ログインを使用すると、エラー 18452 が返されます。 SQL Server 2008 では、代わりにエラー 18456 が返されます。

Showplan

機能 説明
プラン表示の XML スキーマ Showplan XML スキーマに新しい SeekPredicateNew 要素が追加され、外側の xsd シーケンス (SqlPredicatesType) が xsd:choice> 項目に<変換されます。 1 つ以上の SeekPredicate 要素の代わりに、Showplan XML に 1 つ以上の SeekPredicateNew 要素が表示されるようになりました。 この 2 つの要素を同時に指定することはできません。 SeekPredicate は、下位互換性のためにプラン表示 XML スキーマで保持されます。ただし、SQL Server 2008 で作成されたクエリ プランには SeekPredicateNew 要素が含まれている場合があります。 SeekPredicate 要素が存在しない場合、ノード ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates から SeekPredicate 子のみを取得する必要があるアプリケーションは失敗する可能性があります。 このノードの SeekPredicate 要素または SeekPredicateNew 要素を想定するようにアプリケーションを書き直します。 詳細については、「」を参照してください。
プラン表示の XML スキーマ Showplan XML スキーマの ObjectType 複合型に新しい IndexKind 属性が追加されます。 SQL Server 2005 スキーマに対してSQL Serverプランを厳密に検証するアプリケーションは失敗します。

Transact-SQL

機能 説明
ALTER_AUTHORIZATION_DATABASE DDL イベント 2005 年SQL Server、DDL イベントALTER_AUTHORIZATION_DATABASEが発生すると、データ定義言語 (DDL) 操作のセキュリティ保護可能なエンティティ型がオブジェクトである場合、このイベントの EVENTDATA xml の ObjectType 要素に値 'object' が返されます。 SQL Server 2008 では、実際の型 (たとえば、'table'、'function') が返されます。
CONVERT CONVERT 関数に無効なスタイルが渡されると、変換の種類がバイナリから文字、または文字からバイナリの場合にエラーが返されます。 以前のバージョンのSQL Serverでは、無効なスタイルは、バイナリから文字への変換と文字からバイナリへの変換の既定のスタイルに設定されています。
アセンブリに対する EXECUTE の GRANT/DENY/REVOKE アセンブリに対する EXECUTE 権限の許可、拒否、および取り消しを行うことはできません。 この権限を設定しても効果がなく、エラーが発生します。 代わりに、アセンブリ メソッドを参照するストアド プロシージャまたは関数に対して EXECUTE 権限の許可、拒否、および取り消しを行ってください。
システム型に対する GRANT/DENY/REVOKE 権限 システム型に対する権限の許可、拒否、および取り消しを行うことはできません。 以前のバージョンのSQL Serverでは、これらのステートメントは成功しますが、効果はありません。 SQL Server 2008 では、エラーが返されます。
GROUP BY GROUP BY 句では、GROUP BY リストに使用される式にサブクエリを含めることはできません。 以前のバージョンのSQL Serverでは、これは許可されていました。 SQL Server 2008 では、エラー 144 が返されます。

たとえば、次のコードは、SQL Server 2005 では正常に実行されますが、SQL Server 2008 では実行に失敗します。

DECLARE @Test TABLE(a int NOT NULL);
INSERT INTO @Test SELECT 1 union ALL SELECT 2;
SELECT COUNT(*)
FROM @Test
GROUP BY CASE WHEN a IN (SELECT t.a FROM @Test AS t)
THEN 1 ELSE 0
END;
OUTPUT 句 非決定的な動作を防ぐために、ビューまたはインライン テーブル値関数から返される列が次のいずれかの方法で定義されている場合、OUTPUT 句ではその列を参照できません。

サブクエリ。

ユーザーまたはシステム データのアクセスを実行する、またはそのようなアクセスを実行すると想定されるユーザー定義関数。

ユーザー データまたはシステム データにアクセスするユーザー定義関数を定義に含む計算列



SQL Server が OUTPUT 句でそのような列を検出すると、エラー 4186 が発生します。 詳細については、「 MSSQLSERVER_4186」を参照してください。
OUTPUT INTO 句 OUTPUT INTO 句の対象のテーブルに有効なトリガーを指定することはできません。
precompute rank サーバー レベル オプション このオプションは、SQL Server 2008 ではサポートされていません。 この機能を現在使用しているアプリケーションはできるだけ早く変更してください。
READPAST テーブル ヒント スナップショット分離で READPAST ヒントを指定することはできません。

READ_COMMITED_SNAPSHOT データベース オプションまたは ALLOW_SNAPSHOT_ISOLATION データベース オプションのいずれかが ON に設定されている場合、READPAST ヒントは無視されます。 ただし、READPAST ヒントを READCOMMITTEDLOCK と組み合わせた場合、READPAST の動作は READCOMMITTED ヒントをブロックするのと同じになります。
sp_helpuser sp_helpuser ストアド プロシージャの結果セットで返される次の列名が変更されました。

GroupName は次のとおりです。
RoleName

Group_nameは次のとおりです。
Role_name

Group_idは次のとおりです。
Role_id

Users_in_groupは次のとおりです。
Users_in_role
透過的なデータ暗号化 透過的なデータ暗号化 (TDE) は I/O レベルで実行されます。そのため、ページ構造は、メモリ内では暗号化されず、ページがディスクに書き込まれるときだけ暗号化されます。 データベース ファイルとログ ファイルの両方が暗号化されます。 ページにアクセスするための通常のSQL Serverメカニズムをバイパスするサードパーティ製アプリケーション (たとえば、データファイルやログ ファイルを直接スキャンするなど) は、データがファイル内で暗号化されているため、データベースで TDE を使用すると失敗します。 このようなアプリケーションでは、Window Cryptographic API を利用して、SQL Serverの外部でデータを復号化するためのソリューションを開発できます。

XQuery

機能 説明
Datetime のサポート SQL Server 2005 では、データ型 xs:timexs:date、および xs:dateTime にはタイムゾーンがサポートされていません。 タイム ゾーン データは UTC タイム ゾーンにマップされます。 SQL Server 2008 では、標準の準拠動作が提供され、その結果、次の変更が行われます。

タイム ゾーンを使用しない値の検証

タイム ゾーン指定の有無の保持

内部ストレージ表現の変更

格納された値の解決を増加

負の年の使用禁止



注: 新しい型の値を考慮するように、アプリケーションと XQuery 式を変更します。
XQuery 式と Xpath 式 SQL Server 2005 では、コロン (':') で始まる XQuery または XPath 式のステップが許可されます。 たとえば、次のステートメントのパス式には、コロンで始まる名前テスト (CTR02)) が含まれています。

SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable;

SQL Server 2008 では、XML 標準に準拠していないため、この使用は許可されません。 エラー 9341 が返されます。 先頭のコロンを削除するか、名前テストにプレフィックスを指定してください (n$/CTR02 や n$/p1:CTR02 など)。

接続

機能 説明
SSL を使用したSQL Server Native Clientからの接続 SQL Server Native Clientで接続する場合、"SERVER=shortname;FORCE ENCRYPTION=true" (サブジェクトが完全修飾ドメイン名 (FQDN) を指定した証明書は、検証が緩やかなため、過去に接続されています。 SQL Server 2008 R2 では、セキュリティ強化のために証明書で FQDN のサブジェクトが強制されるようになりました。 緩和された検証に依存しているアプリケーションでは次のいずれかの対処が必要になります。

接続文字列で FQDN を使用する。

-接続文字列の SERVER キーワード (keyword)がアプリケーションの外部で構成されている場合、このオプションはアプリケーションの再コンパイルを必要としません。

-このオプションは、接続文字列がハードコーディングされたアプリケーションでは機能しません。

-このオプションは、ミラー化されたサーバーが単純な名前で応答するため、データベース ミラーリングを使用するアプリケーションでは機能しません。
shortname の別名を追加して FQDN にマップする。

-このオプションは、接続文字列がハードコーディングされたアプリケーションでも機能します。

-このオプションは、プロバイダーが受信したフェールオーバー パートナー名のエイリアスを検索しないため、データベース ミラーリングを使用するアプリケーションでは機能しません。
shortname に対して発行された証明書を使用する。

-このオプションは、すべてのアプリケーションで機能します。

SQL Server 2005 の破壊的変更

Microsoft SQL Serverの非常に古いバージョンのドキュメントをアーカイブ Web ページのセットに蓄積して保持しています。 アーカイブされた Web ページは、Bing.com や Google.com などの検索エンジンの対象にはなりません。 ただし、これらのアーカイブは、Docs の以前のバージョン/ アドレスで確認できます。

これらのアーカイブには少なくとも次の古いドキュメントが含まれます。

  • SQL Server 2014
  • SQL Server 2012
  • SQL Server 2008 R2
  • SQL Server 2008
  • SQL Server 2005

SQL Server 2014 ドキュメントはアーカイブされており、検索エンジンによって処理されなくなりました。 2014 年の記事では、NOINDEX と NOFOLLOW を使用して自身を宣言するようになりました。

最新バージョンのSQL Serverとその他の最新バージョンについては、こちらを参照してください

参照

SQL Server 2014 データベース エンジンの非推奨の機能
SQL Server 2014 におけるデータベース エンジン機能の動作の変更
SQL Server 2014 で廃止されたデータベース エンジンの機能
SQL Server データベース エンジンの旧バージョンとの互換性
ALTER DATABASE 互換性レベル (Transact-SQL)
SQL Server 2014 の管理ツール機能における重大な変更