このトピックでは、SQL Server 2014 データベース エンジン以前のバージョンのSQL Serverの破壊的変更について説明します。 これらの変更によって、以前のバージョンの SQL Serverに基づくアプリケーション、スクリプト、または機能が使用できなくなる場合があります。 アップグレード時にこれらの問題が発生する可能性があります。 詳細については、「 アップグレード アドバイザーを使用したアップグレードの準備」を参照してください。
SQL Server 2014 の破壊的変更
新しい問題はありません。
SQL Server 2012 の破壊的変更
Transact-SQL
| 特徴 | Description |
|---|---|
| NEXT という名前の列またはテーブルから選択する | シーケンスでは、ANSI 標準の NEXT VALUE FOR 関数が使用されます。 テーブルまたは列の名前が NEXT で、テーブルまたは列の別名が VALUE の場合、ANSI 標準 AS を省略すると、結果のステートメントでエラーが発生する可能性があります。 回避するには、ANSI 標準 AS キーワードを含めます。 たとえば、 SELECT NEXT VALUE FROM Table は SELECT NEXT AS VALUE FROM Table として書き換え、 SELECT Col1 FROM NEXT VALUE は SELECT Col1 FROM NEXT AS VALUEとして書き換える必要があります。 |
| PIVOT 演算子 | データベース互換性レベルが 110 に設定されている場合、PIVOT 演算子は再帰共通テーブル式 (CTE) クエリでは使用できません。 クエリを書き直すか、互換性レベルを 100 以下に変更します。 再帰 CTE クエリで PIVOT を使用すると、グループ化ごとに複数の行がある場合に正しくない結果が生成されます。 |
| sp_setapproleとsp_unsetapprole | 現在、sp_setapproleの cookie OUTPUT パラメーターは、正しい最大長であるvarbinary(8000)として文書化されています。 ただし、現在の実装では varbinary(50)が返されます。 今後のリリースで Cookie の戻り値のサイズが増える場合でもアプリケーションが正常に動作し続けるために、アプリケーションは引き続き varbinary(8000) を予約する必要があります。 詳細については、「 sp_setapprole (Transact-SQL)」を参照してください。 |
| EXECUTE AS | 現在、 EXECUTE AS の Cookie 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または型の計算列に対する CAST および CONVERT 操作datetime2 |
以前のバージョンのSQL Serverでは、timeおよびdatetime2データ型に対する 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 にアップグレードした後、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 editionに基づいて、'Enterprise Edition' または 'Enterprise Edition: コア ベースのライセンス' を返すことができます。 Enterprise エディションは、SQL Serverの 1 つのインスタンスによる最大コンピューティング容量に基づいて区別されます。 SQL Server 2012 のコンピューティング容量制限の詳細については、「SQL Server のエディション別のコンピューティング容量制限」を参照してください。 |
| CREATE LOGIN |
CREATE LOGIN WITH PASSWORD = '
password' HASHED オプションは、SQL Server 7 以前で作成されたハッシュでは使用できません。 |
の CAST および CONVERT 操作 datetimeoffset |
日付と時刻の型から datetimeoffset に変換するときにサポートされるスタイルは 0 または 1 のみです。 他のすべての変換スタイルでは 9809 が返されます。 たとえば、次のコードはエラー 9809 を返します。SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107); |
動的管理ビュー
| ビュー | Description |
|---|---|
| sys.dm_exec_requests | コマンド列が nvarchar(16) から nvarchar(32)に変更されます。 |
| sys.dm_os_memory_cache_counters | 次の列の名前が変更されました。 single_pages_kbは次のとおりです。 pages_kb multi_pages_kb is now: 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 | ロケール列が削除されました。 |
カタログビュー
| ビュー | Description |
|---|---|
| sys.data_spaces sys.partition_schemes sys.filegroups sys.partition_functions |
新しい列 (is_system) がsys.data_spacesとsys.partition_functionsに追加されました。 (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 によってアセンブリのバージョン 10.0 が読み込まれるため、アプリケーションは失敗します。 このエラーは、アプリケーションが次のいずれかのメソッドを呼び出したときに発生します。
GetValueSqlDataReaderクラスのメソッドGetValuesSqlDataReaderクラスのメソッドSqlDataReaderクラスの角かっこインデックス演算子 []ExecuteScalarSqlCommandクラスのメソッド
次のいずれかの方法を使用して、この問題を回避できます。
次の例に示すように、上記の 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 ビット アドレス ウィンドウ拡張機能 (AWE) のサポートは廃止されました。 これにより、32 ビット オペレーティング システムのパフォーマンスが低下する可能性があります。 大量のメモリを使用するインストールの場合は、64 ビット オペレーティング システムに移行します。
XQuery 関数が Surrogate-Aware
XQuery 関数と演算子に対する W3C の推奨事項では、UTF-16 エンコードでは、高範囲 Unicode 文字を 1 つのグリフとして表すサロゲート ペアをカウントする必要があります。 ただし、SQL Server 2012 より前のバージョンのSQL Serverでは、文字列関数はサロゲート ペアを 1 文字として認識しませんでした。 文字列の長さの計算や部分文字列の抽出など、一部の文字列操作で正しくない結果が返されました。 SQL Server 2012 では、UTF-16 とサロゲート ペアの正しい処理が完全にサポートされるようになりました。
SQL Serverの XML データ型では、整形式のサロゲート ペアのみが許可されます。 ただし、一部の関数は、無効または部分的なサロゲート ペアを文字列値として XQuery 関数に渡すことができるため、特定の状況では未定義または予期しない結果を返すことができます。 SQL Serverで XQuery を使用する場合は、次の方法で文字列値を生成することを検討してください。
バイナリ値として定数文字列値を指定します。 このメソッドを使用する場合、無効なサロゲート ペアまたは部分サロゲート ペアを渡すことができます。
文字エンティティを指定して、定数文字列値を指定します。 このメソッドを使用する場合、無効なサロゲート ペアを渡すことができません。 XQuery 関数には、高レベル文字に対して 1 つの文字エンティティが必要です。 これらの関数は、サロゲート ペア文字の文字エンティティが指定されている場合にエラーを発生させます。
sql:column または sql:variable を使用して外部値をインポートします。 これらのメソッドを使用する場合、無効なサロゲート ペアまたは部分サロゲート ペアが引き続き導入される可能性があります。
影響を受ける XQuery 関数と演算子
次の XQuery 関数と演算子は、SQL Server 2012 で UTF-16 サロゲート ペアを正しく処理するようになりました。
fn:string-length。 ただし、無効なサロゲート ペアまたは部分サロゲート ペアが引数として渡された場合、 文字列長 の動作は未定義になります。
fn:substring。
fn:contains。 ただし、部分サロゲート ペアが値として渡された場合、 適切 な形式のサロゲート ペアに含まれる部分サロゲート ペアが見つかる可能性があるため、予期しない結果が返される可能性があります。
fn:concat。 ただし、部分サロゲート ペアが値として渡された場合、 concat は正しくないサロゲート ペアまたは部分サロゲート ペアを生成する可能性があります。
比較演算子と order by 句。 比較演算子には、+、 <、 >、 <=、 >=、
eq、lt、gt、le、および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 ドライバーの場合、ADO と同じ動作になります.NET
アプリケーションは、接続を開いた後に分離レベルを常に明示的に設定して、必要なものを取得する必要があります。
JDBC 接続をプールできるため、アプリケーションはランダムな分離レベルを取得し、そのことを知らない可能性があります。
下位互換性を維持するために、この新しい動作は TDS 7.4 以降の最近のクライアントにのみ適用されます。
下位互換性
新しい動作は互換性レベルによって異なります
次の関数と演算子は、互換性レベルが 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 では変更が導入されませんでした。
Collations
| 特徴 | Description |
|---|---|
| 新しい照合順序 | SQL Server 2008 では、Windows Server 2008 で提供される照合順序と完全に一致する新しい照合順序が導入されています。 これらの 80 個の新しい照合順序により、言語の精度が向上し、*_100 バージョン参照で示されます。 サーバーまたはデータベースの新しい照合順序を選択した場合は、古いクライアント ドライバーを持つクライアントでは照合順序が認識されない可能性があることに注意してください。 照合順序が認識されないと、アプリケーションがエラーを返して失敗する可能性があります。 次の解決策を検討してください。 基になるシステムの照合順序が更新されるように、クライアント オペレーティング システムをアップグレードします。 クライアントにデータベース クライアント ソフトウェアがインストールされている場合は、データベース クライアント ソフトウェアにサービス更新プログラムを適用することを検討してください。 クライアントのコード ページにマップする既存の照合順序を選択します。 |
共通言語ランタイム (CLR)
| 特徴 | Description |
|---|---|
| CLR アセンブリ | データベースを SQL Server 2008 にアップグレードすると、新しいデータ型をサポートするMicrosoft.SqlServer.Types アセンブリが自動的にインストールされます。 アップグレード アドバイザールールは、競合する名前を持つユーザーの種類またはアセンブリを検出します。 アップグレード アドバイザーは、競合するアセンブリの名前を変更し、競合する型の名前を変更するか、コード内で 2 部構成の名前を使用してその既存のユーザー型を参照することをお勧めします。データベースのアップグレードで、競合する名前のユーザー アセンブリが検出されると、そのアセンブリの名前が自動的に変更され、データベースが疑わしいモードになります。 アップグレード時に競合する名前を持つユーザー型が検出された場合、特別な処理は実行されません。 アップグレード後は、古いユーザー型と新しいシステム型の両方が存在することになります。 ユーザー型は、2 つの部分から構成される名前を介してのみ使用できます。 |
| CLR アセンブリ | SQL Server 2008 .NET Framework 3.5 SP1 がインストールされ、グローバル アセンブリ キャッシュ (GAC) 内のライブラリが更新されます。 SQL Server データベースにサポートされていないライブラリが登録されている場合、SQL Server アプリケーションは、SQL Server 2008 にアップグレードした後に動作を停止する可能性があります。 これは、GAC 内のライブラリのサービスまたはアップグレードでは、SQL Server内のアセンブリが更新されないためです。 アセンブリがSQL Server データベースと GAC の両方に存在する場合、アセンブリの 2 つのコピーが完全に一致している必要があります。 一致しない場合は、アセンブリが CLR 統合によって使用されるときにエラー SQL Server発生します。 詳細については、「サポートされている.NETフレームワーク ライブラリ」を参照してください。 データベースをアップグレードした後、ALTER ASSEMBLY ステートメントを使用して、SQL Server データベース内のアセンブリのコピーをサービスまたはアップグレードします。 詳細については、 サポート技術情報の記事 949080 を参照してください。 アプリケーションでサポートされていない .NET フレームワーク ライブラリを使用しているかどうかを検出するには、データベースで次のクエリを実行します。 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)、 ntext、 text、 image、または大きな UDT のパラメーターがあり、メソッドに DataAccessKind.Read 属性がありません。 この問題を解決するには、メソッドに DataAccessKind.Read 属性を追加し、アセンブリを再コンパイルして、ルーチンとアセンブリを再デプロイします。偽装を実行する Init メソッドを持つ CLR テーブル値関数。 この問題を解決するには、メソッドに DataAccessKind.Read 属性を追加し、アセンブリを再コンパイルし、ルーチンとアセンブリを再デプロイします。 偽装を実行する FillRow メソッドを持つ CLR テーブル値関数。 この問題を解決するには、 FillRow メソッドから偽装を削除します。 FillRow メソッドを使用して外部リソースにアクセスしないでください。 代わりに、 Init メソッドから外部リソースにアクセスします。 |
動的管理ビュー
| ビュー | Description |
|---|---|
| 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)」を参照してください。 |
エラーとイベント
| 特徴 | Description |
|---|---|
| ログイン エラー | SQL Server 2005 では、WINDOWS認証のみを使用するように構成されたサーバーへの接続に SQL ログインを使用すると、エラー 18452 が返されます。 SQL Server 2008 では、代わりにエラー 18456 が返されます。 |
Showplan
| 特徴 | Description |
|---|---|
| プラン表示 XML スキーマ | Showplan XML スキーマに新しい SeekPredicateNew 要素が追加され、外側の xsd シーケンス (SqlPredicatesType) が <xsd:choice> 項目に変換されます。 1 つ以上の SeekPredicate 要素ではなく、1 つ以上の SeekPredicateNew 要素が Showplan XML に表示されるようになりました。 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
| 特徴 | Description |
|---|---|
| ALTER_AUTHORIZATION_DATABASE DDL イベント | SQL Server 2005 では、DDL イベントALTER_AUTHORIZATION_DATABASE発生すると、データ定義言語 (DDL) 操作でセキュリティ保護可能なエンティティ型がオブジェクトである場合、このイベントの EVENTDATA xml の ObjectType 要素に値 'object' が返されます。 SQL Server 2008 では、実際の型 (たとえば、'table'、'function') が返されます。 |
| CONVERT | 無効なスタイルが CONVERT 関数に渡された場合、変換の種類がバイナリから文字、または文字からバイナリに変換された場合にエラーが返されます。 以前のバージョンのSQL Serverでは、無効なスタイルは、バイナリから文字への変換と文字からバイナリへの変換の既定のスタイルに設定されています。 |
| GRANTアセンブリの /DENY/REVOKE EXECUTE | EXECUTE 権限をアセンブリに対して許可、拒否、または取り消すことはできません。 このアクセス許可は影響を受けず、エラーが発生するようになりました。 代わりに、アセンブリ メソッドを参照するストアド プロシージャまたは関数に対する EXECUTE 権限を付与、拒否、または取り消します。 |
| GRANTシステムの種類に対する /DENY/REVOKE アクセス許可 | システムの種類に対するアクセス許可を付与、拒否、または取り消すことはできません。 以前のバージョンのSQL Serverでは、これらのステートメントは成功しますが、効果はありません。 SQL Server 2008 では、エラーが返されます。 |
| GROUP BY(グループ化するSQLコマンド) | 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 句のターゲット テーブルには、有効なトリガーを含めることはできません。 |
| 事前計算ランクサーバーレベルオプション | このオプションは、SQL Server 2008 ではサポートされていません。 この機能を現在使用しているアプリケーションをできるだけ早く変更します。 |
| READPAST テーブル ヒント | スナップショット分離で READPAST ヒントを指定することはできません。 READ_COMMITED_SNAPSHOT または ALLOW_SNAPSHOT_ISOLATION データベース オプションが ON に設定されている場合、READPAST ヒントは無視されます。 ただし、READPAST ヒントと READCOMMITTEDLOCK を組み合わせると、READPAST 動作はブロック READCOMMITTED ヒントと同じです。 |
| sp_helpuser | sp_helpuser ストアド プロシージャの結果セットで返される次の列名が変更されました。 GroupName は次のようになります。 役割名 Group_nameは次のようになります。 Role_name Group_idは次のようになります。 Role_id Users_in_groupは次のとおりです。 Users_in_role |
| Transparent Data Encryption | Transparent Data Encryption (TDE) は I/O レベルで実行されます。ページ構造はメモリ内で暗号化されず、ページがディスクに書き込まれるときにのみ暗号化されます。 データベース ファイルとログ ファイルの両方が暗号化されます。 ページにアクセスするための通常のSQL Server メカニズムをバイパスするサード パーティ製アプリケーション (データファイルやログ ファイルを直接スキャンするなど) は、ファイル内のデータが暗号化されているため、データベースで TDE を使用すると失敗します。 このようなアプリケーションでは、Window Cryptographic API を利用して、SQL Serverの外部でデータを復号化するためのソリューションを開発できます。 |
XQuery
| 特徴 | Description |
|---|---|
| Datetime のサポート | SQL Server 2005 では、データ型xs:time、xs: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 が返されます。 先頭のコロンを削除するか、test という名前のプレフィックスを指定します (例: n$/CTR02) または (n$/p1:CTR02)。 |
接続します。
| 特徴 | Description |
|---|---|
| SSL を使用した SQL Server Native Client からの接続 | SQL Server Native Client で接続する場合、"SERVER=shortname; を使用するアプリケーション。FORCE ENCRYPTION=true" (サブジェクトが完全修飾ドメイン名 (FQDN) を指定した証明書は、検証が緩和されたため、過去に接続されています。 SQL Server 2008 R2 では、証明書の FQDN サブジェクトを適用することでセキュリティが強化されます。 緩やかな検証に依存するアプリケーションは、次のいずれかのアクションを実行する必要があります。 接続文字列で FQDN を使用します。 -接続文字列の SERVER キーワードがアプリケーションの外部で構成されている場合、このオプションではアプリケーションを再コンパイルする必要はありません。 -このオプションは、接続文字列がハードコーディングされたアプリケーションでは機能しません。 -このオプションは、ミラー化されたサーバーが単純な名前で応答するため、データベース ミラーリングを使用するアプリケーションでは機能しません。 |
| FQDN にマップする短い名前のエイリアスを追加します。 -このオプションは、接続文字列がハードコードされたアプリケーションでも機能します。 -このオプションは、プロバイダーが受信したフェールオーバー パートナー名のエイリアスを検索しないため、データベース ミラーリングを使用するアプリケーションでは機能しません。 |
|
| 短い名前の証明書を発行します。 -このオプションは、すべてのアプリケーションで機能します。 |
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 での管理ツール機能の重大な変更