Perubahan Perilaku pada Fitur Mesin Database di SQL Server 2014

Topik ini menjelaskan perubahan perilaku di Mesin Database. Perubahan perilaku memengaruhi cara kerja fitur atau berinteraksi di SQL Server 2014 dibandingkan dengan versi SQL Server sebelumnya.

Perubahan Perilaku pada SQL Server 2014

Dalam versi SQL Server sebelumnya, kueri terhadap dokumen XML yang berisi string dengan panjang tertentu (lebih dari 4020 karakter) dapat mengembalikan hasil yang salah. Pada SQL Server 2014, kueri tersebut mengembalikan hasil yang benar.

Perubahan Perilaku pada SQL Server 2012

Penemuan Metadata

Peningkatan di Mesin Database yang dimulai dengan SQL Server 2012 memungkinkan SQLDescribeCol untuk mendapatkan deskripsi yang lebih akurat tentang hasil yang diharapkan daripada yang dikembalikan oleh SQLDescribeCol di versi SQL Server sebelumnya. Untuk informasi selengkapnya, lihat Penemuan Metadata.

Opsi SET FMTONLY untuk menentukan format respons tanpa benar-benar menjalankan kueri diganti dengan sp_describe_first_result_set (Transact-SQL), sp_describe_undeclared_parameters (Transact-SQL), sys.dm_exec_describe_first_result_set (Transact-SQL), dan sys.dm_exec_describe_first_result_set_for_object (Transact-SQL).

Perubahan Pada Perilaku dalam Membuat Skrip Tugas SQL Server Agent

Dimulai dengan SQL Server 2012, jika Anda membuat pekerjaan baru dengan menyalin skrip dari pekerjaan yang ada, pekerjaan baru mungkin secara tidak sengaja memengaruhi pekerjaan yang ada. Untuk membuat pekerjaan baru menggunakan skrip dari pekerjaan yang ada, hapus parameter secara manual @schedule_uid yang biasanya merupakan parameter terakhir dari bagian yang membuat jadwal pekerjaan dalam pekerjaan yang ada. Ini akan membuat jadwal independen baru untuk pekerjaan baru tanpa memengaruhi pekerjaan yang ada.

Lipatan Konstan untuk Fungsi dan Metode User-Defined CLR

Dimulai dengan SQL Server 2012, objek CLR yang ditentukan pengguna berikut sekarang dapat dilipat:

  • Fungsi yang ditentukan pengguna CLR bernilai skalar deterministik.
  • Metode deterministik dari jenis yang ditentukan pengguna CLR.

Peningkatan ini berusaha meningkatkan performa ketika fungsi atau metode ini dipanggil lebih dari sekali dengan argumen yang sama. Namun, perubahan ini dapat menyebabkan hasil yang tidak terduga ketika fungsi atau metode non-deterministik telah ditandai sebagai deterministik dalam kesalahan. Determinisme fungsi atau metode CLR ditunjukkan oleh nilai IsDeterministic properti dari SqlFunctionAttribute atau SqlMethodAttribute.

Perilaku Metode STEnvelope() Telah Berubah dengan Jenis Spasial Kosong

Perilaku STEnvelope metode dengan objek kosong sekarang konsisten dengan perilaku metode spasial SQL Server lainnya.

Pada SQL Server 2008, STEnvelope metode mengembalikan hasil berikut ketika dipanggil dengan objek kosong:

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  

Pada SQL Server 2012, STEnvelope metode ini sekarang mengembalikan hasil berikut ketika dipanggil dengan objek kosong:

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  

Untuk menentukan apakah objek spasial kosong, panggil metode STIsEmpty (Tipe Data geometri).

Fungsi LOG Memiliki Parameter Opsional Baru

Fungsi LOG sekarang memiliki parameter dasar opsional. Untuk informasi selengkapnya, lihat LOG (Transact-SQL).

Komputasi Statistik selama Operasi Indeks Yang Dipartisi Telah Berubah

Pada SQL Server 2014, statistik tidak dibuat dengan memindai semua baris dalam tabel saat indeks yang dipartisi dibuat atau dibangun kembali. Sebagai gantinya, Pengoptimal Kueri menggunakan algoritma pengambilan sampel default untuk menghasilkan statistik. Setelah meningkatkan database dengan indeks yang dipartisi, Anda mungkin melihat perbedaan dalam data histogram untuk indeks ini. Perubahan perilaku ini mungkin tidak memengaruhi performa kueri. Untuk mendapatkan statistik pada indeks yang dipartisi dengan memindai semua baris dalam tabel, gunakan CREATE STATISTICS atau UPDATE STATISTICS dengan FULLSCAN klausul .

Konversi Tipe Data dengan Metode nilai XML Telah Berubah

Perilaku value internal metode jenis xml data telah berubah. Metode ini melakukan XQuery terhadap XML dan mengembalikan nilai skalar dari jenis data SQL Server yang ditentukan. Jenis xs harus dikonversi ke jenis data SQL Server. Sebelumnya, metode secara value internal mengonversi nilai sumber menjadi xs:string, lalu mengonversi xs:string ke jenis data SQL Server. Pada SQL Server 2014, konversi ke xs:string dilewati dalam kasus berikut:

Jenis data XS sumber Jenis data SQL Server tujuan
byte

short

int

bilangan bulat

panjang

unsignedByte

unsignedShort

unsignedInt

unsignedLong

positiveInteger

nonPositiveInteger

bilangan bulat negatif

nonNegativeInteger
tinyint

smallint

int

bigint

decimal

numeric
decimal decimal

numeric
float real
double float

Perilaku baru meningkatkan performa ketika konversi perantara dapat dilewati. Namun, ketika konversi jenis data gagal, Anda melihat pesan kesalahan yang berbeda dari yang dimunculkan saat mengonversi dari nilai xs:string perantara. Misalnya, jika metode nilai gagal mengonversi int nilai 100000 menjadi smallint, pesan kesalahan sebelumnya adalah:

The conversion of the nvarchar value '100000' overflowed an INT2 column. Use a larger integer column.

Pada SQL Server 2014, tanpa konversi perantara ke xs:string, pesan kesalahannya adalah:

Arithmetic overflow error converting expression to data type smallint.

Perubahan Perilaku sqlcmd.exe dalam Mode XML

Ada perubahan perilaku jika Anda menggunakan sqlcmd.exe dengan mode XML (:perintah XML ON) saat menjalankan SELECT * dari T FOR XML .... .

Pesan DBCC CHECKIDENT Direvisi

Pada SQL Server 2012, pesan yang dikembalikan oleh perintah DBCC CHECKIDENT hanya berubah ketika digunakan dengan RESEED new_reseed_value untuk mengubah nilai identitas saat ini. Pesan baru adalah "Memeriksa informasi identitas: nilai identitas saat ini '<nilai> identitas saat ini'". Eksekusi DBCC selesai. Jika DBCC mencetak pesan kesalahan, hubungi administrator sistem Anda."

Dalam versi sebelumnya, pesannya adalah "Memeriksa informasi identitas: nilai identitas saat ini '<nilai> identitas saat ini', nilai kolom saat ini '<nilai> kolom saat ini'. Eksekusi DBCC selesai. Jika DBCC mencetak pesan kesalahan, hubungi administrator sistem Anda." Pesan tidak berubah ketika DBCC CHECKIDENT ditentukan dengan NORESEED, tanpa parameter kedua, atau tanpa nilai reseed. Untuk informasi selengkapnya, lihat DBCC CHECKIDENT (Transact-SQL).

Perilaku fungsi exist() pada jenis data XML telah berubah

Perilaku exist() fungsi telah berubah saat membandingkan jenis data XML dengan nilai null menjadi 0 (nol). Pertimbangkan contoh berikut:

DECLARE @test XML;  
SET @test = null;  
SELECT COUNT(1) WHERE @test.exist('/dogs') = 0;  

Dalam versi sebelumnya, perbandingan ini mengembalikan 1 (true); sekarang, perbandingan ini mengembalikan 0 (nol, salah).

Perbandingan berikut tidak berubah:

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  

Lihat juga

Melanggar Perubahan pada Fitur Mesin Database di SQL Server 2014
Fitur Mesin Database yang Tidak Digunakan Lagi di SQL Server 2014
Fungsionalitas Mesin Database yang Dihentikan di SQL Server 2014
ALTER DATABASE Compatibility Level (Transact-SQL)