このトピックでは、データベース エンジンでの動作の変更について説明します。 動作の変更は、以前のバージョンの SQL Server と比較して、SQL Server 2014 での機能の動作または対話方法に影響します。
SQL Server 2014 での動作の変更
以前のバージョンの SQL Server では、特定の長さ (4020 文字を超える) の文字列を含む XML ドキュメントに対するクエリを実行すると、正しくない結果が返される可能性があります。 SQL Server 2014 では、このようなクエリは正しい結果を返します。
SQL Server 2012 での動作の変更
メタデータの検出
SQL Server 2012 以降のデータベース エンジンの機能強化により、SQLDescribeCol は、以前のバージョンの SQL Server で SQLDescribeCol から返された結果よりも正確な結果を取得できます。 詳細については、「 メタデータの検出」を参照してください。
クエリを実際に実行せずに応答の形式を決定するための SET FMTONLY オプションは、 sp_describe_first_result_set (Transact-SQL)、 sp_describe_undeclared_parameters (Transact-SQL)、 sys.dm_exec_describe_first_result_set (Transact-SQL)、および sys.dm_exec_describe_first_result_set_for_object (Transact-SQL) に置き換えられます。
SQL Server エージェント タスクのスクリプト作成における動作の変更
SQL Server 2012 以降では、既存のジョブからスクリプトをコピーして新しいジョブを作成すると、新しいジョブが誤って既存のジョブに影響する可能性があります。 既存のジョブのスクリプトを使用して新しいジョブを作成するには、既存のジョブでジョブ スケジュールを作成するセクションの最後のパラメーターであるパラメーター @schedule_uid を手動で削除します。 これにより、既存のジョブに影響を与えることなく、新しいジョブの新しい独立したスケジュールが作成されます。
CLR User-Defined 関数とメソッドの定数フォールディング
SQL Server 2012 以降では、次のユーザー定義 CLR オブジェクトが折りたたみ可能になりました。
- 決定論的スカラー値 CLR ユーザー定義関数。
- CLR ユーザー定義型の決定論的メソッド。
この改善により、これらの関数またはメソッドが同じ引数を使用して複数回呼び出される場合に、パフォーマンスが向上します。 ただし、この変更により、非決定論的関数またはメソッドがエラーで決定論的としてマークされている場合、予期しない結果が発生する可能性があります。 CLR 関数またはメソッドの決定性は、SqlFunctionAttribute
またはSqlMethodAttribute
のIsDeterministic
プロパティの値によって示されます。
STEnvelope() メソッドの動作が空の空間型で変更されました
空のオブジェクトを使用した STEnvelope
メソッドの動作は、他の SQL Server 空間メソッドの動作と一致するようになりました。
SQL Server 2008 では、 STEnvelope
メソッドは、空のオブジェクトで呼び出されたときに次の結果を返しました。
SELECT geometry::Parse('POINT EMPTY').STEnvelope().ToString()
-- returns POINT EMPTY
SELECT geometry::Parse('LINESTRING EMPTY').STEnvelope().ToString()
-- returns LINESTRING EMPTY
SELECT geometry::Parse('POLYGON EMPTY').STEnvelope().ToString()
-- returns POLYGON EMPTY
SQL Server 2012 では、空のオブジェクトで呼び出されると、 STEnvelope
メソッドによって次の結果が返されるようになりました。
SELECT geometry::Parse('POINT EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
SELECT geometry::Parse('LINESTRING EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
SELECT geometry::Parse('POLYGON EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
空間オブジェクトが空かどうかを判断するには、 STIsEmpty (geometry データ型) メソッドを呼び出します。
LOG 関数に新しい省略可能なパラメーターがある
LOG
関数に省略可能な基本パラメーターが追加されました。 詳細については、 LOG (Transact-SQL) を参照してください。
パーティション インデックス操作中の統計計算が変更されました
SQL Server 2014 では、パーティション インデックスの作成時または再構築時にテーブル内のすべての行をスキャンすることによって統計が作成されるわけではありません。 代わりに、クエリ オプティマイザーは既定のサンプリング アルゴリズムを使用して統計を生成します。 パーティション インデックスを使用してデータベースをアップグレードすると、これらのインデックスのヒストグラム データに違いがあることに気付く場合があります。 この動作の変更は、クエリのパフォーマンスに影響しない可能性があります。 テーブル内のすべての行をスキャンしてパーティション インデックスの統計を作成するには、CREATE STATISTICS
句で UPDATE STATISTICS
または FULLSCAN
を使用します。
XML 値メソッドによるデータ型変換が変更されました
xml
データ型のvalue
メソッドの内部動作が変更されました。 このメソッドは、XML に対して XQuery を実行し、指定された SQL Server データ型のスカラー値を返します。 xs 型は SQL Server データ型に変換する必要があります。 以前は、 value
メソッドは内部的にソース値を xs:string に変換した後、xs:string を SQL Server データ型に変換しました。 SQL Server 2014 では、次の場合、xs:string への変換はスキップされます。
ソース XS データ型 | 変換先 SQL Server データ型 |
---|---|
バイト 短い 整数 (int) 整数 (integer) 長い 符号なしバイト 符号なし短整数 符号なし整数 符号なし長整数 正の整数 非正整数 負の整数 非負整数 |
tinyint スモールイント 整数 (int) bigint(ビッグイント) 小数点 数値 |
小数点 | 小数点 数値 |
フロート | 本当の |
ダブル | フロート |
この新しい動作により、中間変換をスキップできる場合のパフォーマンスが向上します。 ただし、データ型の変換が失敗すると、中間の xs:string 値から変換するときに発生したエラー メッセージとは異なるエラー メッセージが表示されます。 たとえば、value メソッドが int
値 100000 を smallint
に変換できなかった場合、前のエラー メッセージは次のようになります。
The conversion of the nvarchar value '100000' overflowed an INT2 column. Use a larger integer column.
SQL Server 2014 では、xs:string への中間変換がない場合、エラー メッセージは次のようになります。
Arithmetic overflow error converting expression to data type smallint.
XML モードでの sqlcmd.exe 動作の変更
T FOR XML ... から SELECT * を実行するときに XML モード (:XML ON コマンド) で sqlcmd.exe を使用すると、動作が変更されます。
DBCC CHECKIDENT の改訂されたメッセージ
SQL Server 2012 では、DBCC CHECKIDENT コマンドによって返されるメッセージは、現在の ID 値を変更するために RESEED new_reseed_value と共に使用されている場合にのみ変更されました。 新しいメッセージは "身元情報を確認しています: 現在の身元の値 '<current identity value>'" です。 DBCC の実行が完了しました。 DBCC でエラー メッセージが出力された場合は、システム管理者に問い合わせてください。
以前のバージョンでは、"Checking identity information: current identity value '<current identity value>', current column value '<current column value>' というメッセージが表示されます。DBCC の実行が完了しました。DBCC でエラー メッセージが出力された場合は、システム管理者に問い合わせてください。DBCC CHECKIDENT
が NORESEED
、2 番目のパラメーター、または再シード値なしで指定されている場合、メッセージは変更されません。 詳細については、「DBCC CHECKIDENT (Transact-SQL)」をご覧ください。
XML データ型に対する exist() 関数の動作が変更されました
xml データ型と null 値を 0 (ゼロ) に比較すると、 exist()
関数の動作が変更されました。 次の例を確認してください。
DECLARE @test XML;
SET @test = null;
SELECT COUNT(1) WHERE @test.exist('/dogs') = 0;
以前のバージョンでは、この比較では 1 (true) が返されます。ここで、この比較は 0 (ゼロ、false) を返します。
次の比較は変更されていません。
DECLARE @test XML;
SET @test = null;
SELECT COUNT(1) WHERE @test.exist('/dogs') = 1; -- 0 expected, 0 returned
SELECT COUNT(1) WHERE @test.exist('/dogs') IS NULL; -- 1 expected, 1 returned
こちらもご覧ください
SQL Server 2014 におけるデータベース エンジン機能の重大な変更
SQL Server 2016 データベース エンジンの非推奨機能
SQL Server 2014 で廃止されたデータベース エンジンの機能
ALTER DATABASE 互換性レベル (Transact-SQL)