Melanggar Perubahan pada Fitur Mesin Database di SQL Server 2014

Topik ini menjelaskan perubahan yang melanggar di Mesin Database SQL Server 2014 dan versi SQL Server yang lebih lama. Perubahan ini dapat merusak aplikasi, skrip, atau fungsionalitas yang didasarkan pada versi SQL Server sebelumnya. Anda mungkin mengalami masalah ini saat meningkatkan. Untuk informasi selengkapnya, lihat Menggunakan Upgrade Advisor untuk Mempersiapkan Peningkatan.

Perubahan Mencolok pada SQL Server 2014

Tidak ada masalah baru.

Perubahan Mencolok pada SQL Server 2012

Transact-SQL

Fitur Deskripsi
Memilih dari kolom atau tabel bernama NEXT Urutan menggunakan fungsi NEXT VALUE FOR standar ANSI. Jika tabel atau kolom diberi nama NEXT dan tabel atau kolom diberi alias sebagai VALUE, dan jika AS standar ANSI dihilangkan, pernyataan yang dihasilkan dapat menyebabkan kesalahan. Untuk mengatasinya, sertakan kata kunci AS standar ANSI. Misalnya, SELECT NEXT VALUE FROM Table harus ditulis ulang sebagai SELECT NEXT AS VALUE FROM Table dan SELECT Col1 FROM NEXT VALUE harus ditulis ulang sebagai SELECT Col1 FROM NEXT AS VALUE.
Operator PIVOT Operator PIVOT tidak diizinkan dalam kueri ekspresi tabel umum (CTE) rekursif saat tingkat kompatibilitas database diatur ke 110. Tulis ulang kueri, atau ubah tingkat kompatibilitas menjadi 100 atau lebih rendah. Menggunakan PIVOT dalam kueri CTE rekursif menghasilkan hasil yang salah ketika ada lebih dari satu baris per pengelompokan.
sp_setapprole dan sp_unsetapprole Parameter cookie OUTPUT untuk sp_setapprole saat ini didokumenkan sebagai varbinary(8000) yang merupakan panjang maksimum yang benar. Namun implementasi saat ini mengembalikan varbinary(50). Aplikasi harus terus memesan varbinary(8000) sehingga aplikasi terus beroperasi dengan benar jika ukuran pengembalian cookie meningkat di rilis mendatang. Untuk informasi selengkapnya, lihat sp_setapprole (Transact-SQL).
JALANKAN SEBAGAI Parameter OUTPUT cookie untuk EXECUTE AS saat ini didokumenkan sebagai varbinary(8000) yang merupakan panjang maksimum yang benar. Namun implementasi saat ini mengembalikan varbinary(100). Aplikasi harus terus memesan varbinary(8000) sehingga aplikasi terus beroperasi dengan benar jika ukuran pengembalian cookie meningkat di rilis mendatang. Untuk informasi selengkapnya, lihat EXECUTE AS (Transact-SQL).
sys.fn_get_audit_file (Fungsi sys.fn_get_audit_file) Dua kolom tambahan (user_defined_event_id dan user_defined_information) telah ditambahkan untuk mendukung peristiwa audit yang ditentukan pengguna. Aplikasi yang tidak memilih kolom berdasarkan nama mungkin mengembalikan lebih banyak kolom dari yang diharapkan. Pilih kolom menurut nama, atau sesuaikan aplikasi untuk menerima kolom tambahan ini.
KATA kunci yang dicadangkan WITHIN WITHIN sekarang menjadi kata kunci yang dicadangkan. Referensi ke objek atau kolom bernama 'dalam' akan gagal. Ganti nama objek atau nama kolom atau batasi nama dengan menggunakan tanda kurung atau tanda kutip. Contohnya,SELECT * FROM [within].
Operasi CAST dan CONVERT pada kolom komputasi jenis time atau datetime2 Dalam versi SQL Server sebelumnya, gaya default untuk operasi CAST dan CONVERT pada time dan datetime2 jenis data adalah 121 kecuali ketika salah satu jenis digunakan dalam ekspresi kolom komputasi. Untuk kolom komputasi, gaya defaultnya adalah 0. Perilaku ini berdampak pada kolom komputasi saat dibuat, digunakan dalam kueri yang melibatkan parameterisasi otomatis, atau digunakan dalam definisi batasan.

Di bawah tingkat kompatibilitas 110, gaya default untuk operasi CAST dan CONVERT pada time dan datetime2 jenis data selalu 121. Jika kueri Anda bergantung pada perilaku lama, gunakan tingkat kompatibilitas kurang dari 110, atau tentukan gaya 0 secara eksplisit dalam kueri yang terpengaruh.

Meningkatkan database ke tingkat kompatibilitas 110 tidak akan mengubah data pengguna yang telah disimpan ke disk. Anda harus memperbaiki data ini secara manual sebagaimana mestinya. Misalnya, jika Anda menggunakan SELECT INTO untuk membuat tabel dari sumber yang berisi ekspresi kolom komputasi yang dijelaskan di atas, data (menggunakan gaya 0) akan disimpan daripada definisi kolom komputasi itu sendiri. Anda perlu memperbarui data ini secara manual agar sesuai dengan gaya 121.
ALTER TABLE Pernyataan ALTER TABLE hanya memungkinkan nama tabel dua bagian (schema.object). Menentukan nama tabel menggunakan format berikut sekarang gagal pada waktu kompilasi dengan kesalahan 117:

server.database.schema.table

.database.schema.table

.. schema.table

Dalam versi sebelumnya yang menentukan format server.database.schema.table menghasilkan kesalahan 4902. Menentukan format .database.schema.table atau format .. schema.table berhasil. Untuk mengatasi masalah ini, hapus penggunaan awalan 4 bagian.
Menelusuri metadata Mengkueri tampilan menggunakan FOR BROWSE atau SET NO_BROWSETABLE ON sekarang mengembalikan metadata tampilan, bukan metadata objek yang mendasar. Perilaku ini sekarang cocok dengan metode lain untuk menelusuri metadata.
SOUNDEX Di bawah tingkat kompatibilitas database 110, fungsi SOUNDEX menerapkan aturan baru yang dapat menyebabkan nilai yang dihitung oleh fungsi berbeda dari nilai yang dihitung di bawah tingkat kompatibilitas sebelumnya. Setelah meningkatkan ke tingkat kompatibilitas 110, Anda mungkin perlu membangun kembali indeks, tumpukan, atau batasan CHECK yang menggunakan fungsi SOUNDEX. Untuk informasi selengkapnya, lihat SOUNDEX (Transact-SQL)
Pesan jumlah baris untuk pernyataan DML yang gagal Pada SQL Server 2012, Mesin Database akan secara konsisten mengirim token TDS DONE dengan RowCount: 0 ke klien ketika pernyataan DML gagal. Dalam versi SQL Server sebelumnya, nilai -1 yang salah dikirim ke klien ketika pernyataan DML yang gagal terkandung dalam blok TRY-CATCH dan diparameterisasi otomatis oleh Mesin Database atau blok TRY-CATCH tidak berada pada tingkat yang sama dengan pernyataan yang gagal. Misalnya, jika blok TRY-CATCH memanggil prosedur tersimpan dan pernyataan DML dalam prosedur gagal, klien akan salah menerima nilai -1.

Aplikasi yang mengandalkan perilaku yang salah ini akan gagal.
SERVERPROPERTY ('Edisi') Edisi produk yang diinstal dari instans SQL Server 2012. Gunakan nilai properti ini untuk menentukan fitur dan batasan, seperti jumlah maksimum CPU yang didukung oleh produk yang diinstal.

Berdasarkan edisi Enterprise yang diinstal, ini dapat mengembalikan 'Enterprise Edition' atau 'Enterprise Edition: Core-based Licensing'. Edisi Enterprise dibedakan berdasarkan kapasitas komputasi maksimum oleh satu instans SQL Server. Untuk informasi selengkapnya tentang Batas kapasitas komputasi di SQL Server 2012, lihat Batas Kapasitas Komputasi berdasarkan Edisi SQL Server.
CREATE LOGIN Opsi CREATE LOGIN WITH PASSWORD = 'kata sandi' HASHED tidak dapat digunakan dengan hash yang dibuat oleh SQL Server 7 atau yang lebih lama.
Operasi CAST dan CONVERT untuk datetimeoffset Satu-satunya gaya yang didukung saat mengonversi dari jenis tanggal dan waktu menjadi datetimeoffset 0 atau 1. Semua gaya konversi lainnya mengembalikan kesalahan 9809. Misalnya, kode berikut mengembalikan kesalahan 9809.

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

Tampilan Manajemen Dinamis

Tampilan Deskripsi
sys.dm_exec_requests Kolom perintah berubah dari nvarchar(16) menjadi nvarchar(32).
sys.dm_os_memory_cache_counters Kolom berikut telah diganti namanya:

single_pages_kb sekarang:
pages_kb

multi_pages_kb
sekarang: pages_in_use_kb
sys.dm_os_memory_cache_entries Kolom pages_allocated_count telah diganti namanya pages_kb.
sys.dm_os_memory_clerks Kolom multi_pages_kb telah dihapus.

Kolom single_pages_kb telah diganti namanya pages_kb.
sys.dm_os_memory_nodes Kolom berikut telah diganti namanya:

single_pages_kb sekarang:
pages_kb

multi_pages_kb sekarang:
foreign_committed_kb
sys.dm_os_memory_objects Kolom berikut telah diganti namanya.

pages_allocated_count sekarang:
pages_in_bytes

max_pages_allocated_count sekarang: max_pages_in_bytes
sys.dm_os_sys_info Kolom berikut telah diganti namanya:

physical_memory_in_bytes sekarang:
physical_memory_kb

bpool_commit_target sekarang:
committed_target_kb

bpool_visible sekarang:
visible_target_kb

virtual_memory_in_bytes sekarang:
virtual_memory_kb

bpool_commited sekarang:
committed_kb
sys.dm_os_workers Kolom lokal telah dihapus.

Tampilan Katalog

Tampilan Deskripsi
sys.data_spaces

sys.partition_schemes

sys.filegroups

sys.partition_functions
Kolom baru, is_system, telah ditambahkan ke sys.data_spaces dan sys.partition_functions. (sys.partition_schemes dan sys.filegroups mewarisi kolom sys.data_spaces.)

Nilai 1 dalam kolom ini menunjukkan bahwa objek digunakan untuk fragmen indeks teks lengkap.

Di sys.partition_functions, sys.partition_schemes, dan sys.filegroups, kolom baru bukanlah kolom terakhir. Revisi kueri yang sudah ada yang mengandalkan urutan kolom yang dikembalikan dari tampilan katalog ini.

Jenis Data SQL CLR (geometri, geografi, dan hierarkiid)

Rakitan Microsoft.SqlServer.Types.dll, yang berisi jenis data spasial dan jenis hierarkiid, telah ditingkatkan dari versi 10.0 ke versi 11.0. Aplikasi kustom yang mereferensikan rakitan ini mungkin gagal ketika kondisi berikut ini benar.

  • Ketika Anda memindahkan aplikasi kustom dari komputer tempat SQL Server 2008 R2 diinstal ke komputer tempat hanya SQL Server 2014 diinstal, aplikasi akan gagal karena versi 10.0 yang dirujuk dari rakitan SqlTypes tidak ada. Anda mungkin melihat pesan kesalahan ini: "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."

  • Saat Anda mereferensikan rakitan SqlTypes versi 11.0, dan versi 10.0 juga diinstal, Anda mungkin melihat pesan kesalahan ini: "System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'."

  • Saat Anda mereferensikan rakitan SqlTypes versi 11.0 dari aplikasi kustom yang menargetkan .NET 3.5, 4, atau 4.5, aplikasi akan gagal karena SqlClient berdasarkan desain memuat versi 10.0 dari rakitan. Kegagalan ini terjadi ketika aplikasi memanggil salah satu metode berikut:

    • GetValuemetode kelas SqlDataReader

    • GetValuesmetode kelas SqlDataReader

    • operator indeks braket [] dari SqlDataReader kelas

    • ExecuteScalarmetode kelas SqlCommand

Anda dapat mengatasi masalah ini dengan menggunakan salah satu metode berikut:

  • Anda dapat mengatasi masalah ini dalam kode Anda dengan memanggil GetSqlBytes metode , alih-alih metode Get yang tercantum di atas, untuk mengambil clr SQL Server jenis sistem, seperti yang ditunjukkan dalam contoh berikut:

    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));  
                }  
          }  
    
  • Anda dapat mengatasi masalah ini dengan menggunakan pengalihan perakitan dalam file konfigurasi aplikasi, seperti yang ditunjukkan dalam contoh berikut:

    <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>  
    
  • Anda dapat mengatasi masalah ini dalam string koneksi Anda dengan menentukan nilai "SQL Server 2012" untuk atribut "Ketik Versi Sistem" untuk memaksa SqlClient memuat versi 11.0 dari rakitan. Atribut string koneksi ini hanya tersedia di .NET 4.5 ke atas.

  • Tag assemblyBinding harus dibungkus di runtime bawah tag .

Dukungan untuk AWE

Dukungan Address Windowing Extensions (AWE) 32-bit dihentikan. Hal ini dapat mengakibatkan performa yang lebih lambat pada sistem operasi 32-bit. Untuk penginstalan menggunakan memori dalam jumlah besar, migrasikan ke sistem operasi 64-bit.

Fungsi XQuery Surrogate-Aware

Rekomendasi W3C untuk fungsi dan operator XQuery mengharuskan mereka menghitung pasangan pengganti yang mewakili karakter Unicode rentang tinggi sebagai glyph tunggal dalam pengodean UTF-16. Namun, dalam versi SQL Server sebelum SQL Server 2012, fungsi string tidak mengenali pasangan pengganti sebagai satu karakter. Beberapa operasi string - seperti perhitungan panjang string dan ekstraksi substring - mengembalikan hasil yang salah. SQL Server 2012 sekarang sepenuhnya mendukung UTF-16 dan penanganan pasangan pengganti yang benar.

Jenis data XML di SQL Server hanya memungkinkan pasangan pengganti yang terbentuk dengan baik. Namun, beberapa fungsi masih dapat mengembalikan hasil yang tidak terdefinisi atau tidak terduga dalam keadaan tertentu, karena dimungkinkan untuk meneruskan pasangan pengganti yang tidak valid atau sebagian ke fungsi XQuery sebagai nilai string. Pertimbangkan metode berikut untuk menghasilkan nilai string saat menggunakan XQuery di SQL Server:

  • Berikan nilai string konstan sebagai nilai biner. Saat menggunakan metode ini, tetap mungkin untuk melewati pasangan pengganti yang tidak valid atau sebagian.

  • Berikan nilai string konstan dengan menyediakan entitas karakter. Saat menggunakan metode ini, tidak dimungkinkan untuk melewati pasangan pengganti yang tidak valid. Fungsi XQuery memerlukan entitas karakter tunggal untuk karakter tingkat tinggi. Fungsi-fungsi ini menimbulkan kesalahan jika entitas karakter untuk karakter pasangan pengganti disediakan.

  • Impor nilai eksternal dengan menggunakan sql:column atau sql:variable. Saat menggunakan metode ini, tetap mungkin untuk memperkenalkan pasangan pengganti yang tidak valid atau sebagian.

Fungsi dan Operator XQuery yang Terpengaruh

Fungsi dan operator XQuery berikut sekarang menangani pasangan pengganti UTF-16 dengan benar di SQL Server 2012:

  • fn:string-length. Namun, jika pasangan pengganti yang tidak valid atau parsial diteruskan sebagai argumen, perilaku panjang string tidak terdefinisi.

  • fn:substring.

  • fn:contains. Namun, jika pasangan pengganti parsial diteruskan sebagai nilai, berisi dapat mengembalikan hasil yang tidak terduga, karena mungkin menemukan pasangan pengganti parsial yang terkandung dalam pasangan pengganti yang terbentuk dengan baik.

  • fn:concat. Namun, jika pasangan pengganti parsial diteruskan sebagai nilai, concat dapat menghasilkan pasangan pengganti yang salah atau pasangan pengganti parsial.

  • Operator perbandingan dan urutan berdasarkan klausa. Operator perbandingan meliputi +, <, , <>=, >=, eq, lt, gt, le, dan ge.

Panggilan Kueri Terdistribusi ke Prosedur Sistem

Panggilan kueri terdistribusi melalui OPENQUERY beberapa prosedur sistem akan gagal ketika dipanggil dari satu server SQL Server 2012 ke server lain. Ini terjadi ketika Mesin Database tidak dapat menemukan metadata untuk prosedur. Contohnya,SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').

Tingkat Isolasi dan sp_reset_connection

Tingkat isolasi untuk koneksi ditangani dengan cara berikut oleh driver klien:

  • Semua driver asli (SNAC, MDAC, ODBC) mengatur tingkat isolasi (berdasarkan pengaturan aplikasi) saat sp_reset_connection.

  • Untuk ADO.NET Anda pada dasarnya akan mendapatkan tingkat isolasi acak tergantung pada koneksi mana yang Anda dapatkan dari kumpulan (dan jika aplikasi menggunakan tingkat isolasi yang berbeda). Karena kumpulan ADO.NET dapat mendaur ulang koneksi secara internal dan transparan, Anda tidak dapat memprediksi apa yang akan keluar dari kumpulan.

  • Untuk driver JDBC, Anda mendapatkan perilaku yang sama dengan ADO.NET

    Aplikasi harus selalu secara eksplisit mengatur tingkat isolasi setelah membuka koneksi untuk mendapatkan apa yang diinginkannya.

    Koneksi JDBC dapat dikumpulkan, sehingga aplikasi mungkin mendapatkan tingkat isolasi acak dan tidak tahu tentang hal itu.

Untuk mempertahankan kompatibilitas mundur, perilaku baru ini hanya berlaku untuk klien terbaru yang dimulai dengan TDS 7.4.

Kompatibilitas mundur

Perilaku baru tergantung pada tingkat kompatibilitas

Fungsi dan operator berikut menunjukkan perilaku baru yang dijelaskan di atas hanya ketika tingkat kompatibilitas adalah 110 atau lebih tinggi:

  • fn:contains.

  • fn:concat.

  • operator perbandingan dan urutan berdasarkan klausul

Perilaku baru bergantung pada URI namespace default untuk fungsi

Fungsi berikut menunjukkan perilaku baru yang dijelaskan di atas hanya ketika URI namespace default sesuai dengan namespace layanan dalam rekomendasi akhir, yaitu, http://www.w3.org/2005/xpath-functions. Ketika tingkat kompatibilitas adalah 110 atau lebih tinggi, maka secara default SQL Server 2012 mengikat namespace fungsi default ke namespace ini. Namun fungsi-fungsi ini menunjukkan perilaku baru ketika namespace ini digunakan terlepas dari tingkat kompatibilitas.

  • fn:string-length

  • fn:substring

Perubahan Mencolok di SQL Server 2008/SQL Server 2008R2

Bagian ini berisi perubahan mencolok yang diperkenalkan pada SQL Server 2008. Tidak ada perubahan yang diperkenalkan di SQL Server 2008 R2.

kolase

Fitur Deskripsi
Kolatasi baru SQL Server 2008 memperkenalkan kolase baru yang selaras penuh dengan kolase yang disediakan oleh Windows Server 2008. 80 kolase baru ini telah meningkatkan akurasi linguistik dan ditandai dengan referensi versi *_100. Jika Anda memilih kolase baru untuk server atau database Anda, ketahuilah bahwa kolase mungkin tidak dikenali oleh klien dengan driver klien yang lebih lama. Kolase yang tidak dikenal dapat menyebabkan aplikasi mengembalikan kesalahan dan gagal. Pertimbangkan solusi berikut:

Tingkatkan sistem operasi klien sehingga kolase sistem yang mendasar diperbarui.

Jika klien Anda memiliki perangkat lunak klien database yang terinstal, pertimbangkan untuk menerapkan pembaruan layanan ke perangkat lunak klien database.

Pilih kolase yang sudah ada yang memetakan ke halaman kode pada klien.

Waktu proses bahasa umum (CLR)

Fitur Deskripsi
Rakitan CLR Saat database ditingkatkan ke SQL Server 2008, Microsoft.SqlServer.Types rakitan untuk mendukung jenis data baru diinstal secara otomatis. Aturan Upgrade Advisor mendeteksi jenis pengguna atau rakitan apa pun dengan nama yang bertentangan. Upgrade Advisor akan menyarankan penggantian nama rakitan yang bertentangan, dan mengganti nama jenis yang bertentangan, atau menggunakan nama dua bagian dalam kode untuk merujuk ke jenis pengguna yang sudah ada sebelumnya.

Jika peningkatan database mendeteksi rakitan pengguna dengan nama yang bertentangan, peningkatan database akan secara otomatis mengganti nama rakitan tersebut dan menempatkan database ke dalam mode tersangka.

Jika ada jenis pengguna dengan nama yang bertentangan selama peningkatan, tidak ada langkah khusus yang diambil. Setelah peningkatan, jenis pengguna lama, dan jenis sistem baru, akan ada. Jenis pengguna hanya akan tersedia melalui nama dua bagian.
Rakitan CLR SQL Server 2008 menginstal .NET Framework 3.5 SP1, yang memperbarui pustaka di Global Assembly Cache (GAC). Jika Anda memiliki pustaka yang tidak didukung yang terdaftar dalam database SQL Server, aplikasi SQL Server Anda mungkin berhenti berfungsi setelah memutakhirkan ke SQL Server 2008. Ini karena layanan atau peningkatan pustaka di GAC tidak memperbarui rakitan di dalam SQL Server. Jika rakitan ada baik dalam database SQL Server maupun di GAC, dua salinan rakitan harus sama persis. Jika tidak cocok, kesalahan akan terjadi ketika rakitan digunakan oleh integrasi CLR SQL Server. Untuk informasi selengkapnya, lihat Pustaka .NET Framework yang didukung.

Setelah memutakhirkan database Anda, layanan atau tingkatkan salinan rakitan di dalam database SQL Server Anda dengan pernyataan ALTER ASSEMBLY. Untuk informasi selengkapnya, lihat artikel Pangkalan Pengetahuan 949080.

Untuk mendeteksi apakah Anda menggunakan pustaka kerangka kerja .NET yang tidak didukung di aplikasi Anda, jalankan kueri berikut di database Anda.

SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%';
Rutinitas CLR Menggunakan peniruan identitas di dalam fungsi yang ditentukan pengguna CLR, agregat yang ditentukan pengguna, atau jenis yang ditentukan pengguna (UDT) dapat menyebabkan aplikasi Anda gagal dengan kesalahan 6522 setelah meningkatkan ke SQL Server 2008. Skenario berikut berhasil di SQL Server 2005 tetapi gagal pada SQL Server 2008. Resolusi disediakan untuk setiap skenario.

Fungsi yang ditentukan pengguna CLR, agregat yang ditentukan pengguna, atau metode UDT yang menggunakan peniruan memiliki parameter jenis nvarchar(max), , varchar(max), varbinary(max)ntext, textimageatau UDT besar, dan tidak memiliki atribut DataAccessKind.Read pada metode . Untuk mengatasi masalah ini, tambahkan atribut DataAccessKind.Read pada metode , kompilasi ulang assembly, dan sebarkan kembali rutinitas dan assembly.

Fungsi bernilai tabel CLR yang memiliki metode Init yang melakukan peniruan. Untuk mengatasi masalah ini, tambahkan atribut DataAccessKind.Read pada metode , kompilasi ulang assembly, dan sebarkan kembali rutinitas dan assembly.

Fungsi bernilai tabel CLR yang memiliki metode FillRow yang melakukan peniruan. Untuk mengatasi masalah ini, hapus peniruan dari metode FillRow . Jangan akses sumber daya eksternal dengan menggunakan metode FillRow . Sebagai gantinya, akses sumber daya eksternal dari metode Init .

Tampilan Manajemen Dinamis

Tampilan Deskripsi
sys.dm_os_sys_info Menghapus kolom cpu_ticks_in_ms dan sqlserver_start_time_cpu_ticks.
sys.dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grants Kolom resource_semaphore_id bukan ID unik di SQL Server 2008. Perubahan ini dapat memengaruhi pemecahan masalah eksekusi kueri. Untuk informasi selengkapnya, lihat sys.dm_exec_query_resource_semaphores (Transact-SQL).

Kesalahan dan Peristiwa

Fitur Deskripsi
Kesalahan masuk Pada SQL Server 2005, kesalahan 18452 dikembalikan ketika login SQL digunakan untuk menyambungkan ke server yang dikonfigurasi untuk hanya menggunakan Autentikasi Windows. Pada SQL Server 2008, kesalahan 18456 dikembalikan sebagai gantinya.

Showplan

Fitur Deskripsi
Skema XML showplan Elemen SeekPredicateNew baru ditambahkan ke skema XML Showplan, dan urutan xsd enclosing (SqlPredicatesType) dikonversi menjadi <item xsd:choice> . Alih-alih satu atau beberapa elemen SeekPredicate , satu atau beberapa elemen SeekPredicateNew sekarang dapat muncul di XML Showplan. Kedua elemen saling eksklusif. SeekPredicate dipertahankan dalam skema XML Showplan untuk kompatibilitas mundur; namun, rencana kueri yang dibuat pada SQL Server 2008 mungkin berisi elemen SeekPredicateNew. Aplikasi yang hanya mengharapkan untuk mengambil anak SeekPredicate dari node ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates mungkin gagal jika elemen SeekPredicate tidak ada. Tulis ulang aplikasi untuk mengharapkan elemen SeekPredicate atau SeekPredicateNew dalam simpul ini. Untuk informasi selengkapnya, lihat .
Skema XML showplan Atribut IndexKind baru ditambahkan ke jenis kompleks ObjectType dalam skema XML Showplan. Aplikasi yang secara ketat memvalidasi rencana SQL Server terhadap skema SQL Server 2005 akan gagal.

Transact-SQL

Fitur Deskripsi
peristiwa DDL ALTER_AUTHORIZATION_DATABASE Pada SQL Server 2005, ketika peristiwa DDL ALTER_AUTHORIZATION_DATABASE diaktifkan, nilai 'objek' dikembalikan dalam elemen ObjectType xml EVENTDATA untuk peristiwa ini ketika jenis entitas dari yang dapat diamankan dalam operasi bahasa definisi data (DDL) adalah objek. Pada SQL Server 2008, jenis aktual (misalnya, 'tabel', atau 'fungsi') dikembalikan.
CONVERT Jika gaya yang tidak valid diteruskan ke fungsi CONVERT, kesalahan dikembalikan ketika jenis konversi adalah biner ke karakter atau karakter ke biner. Dalam versi SQL Server sebelumnya, gaya yang tidak valid diatur ke gaya default untuk konversi biner-ke-karakter dan karakter-ke-biner.
GRANT/DENY/REVOKE EXECUTE pada assembly Izin EXECUTE tidak dapat diberikan, ditolak, atau dicabut ke rakitan. Izin ini tidak memengaruhi dan sekarang menyebabkan kesalahan. Berikan, tolak, atau cabut izin EXECUTE pada prosedur atau fungsi tersimpan yang mereferensikan metode perakitan sebagai gantinya.
IZIN GRANT/DENY/REVOKE pada jenis sistem Izin tidak dapat diberikan, ditolak, atau dicabut ke jenis sistem. Dalam versi SQL Server sebelumnya, pernyataan ini berhasil tetapi tidak berpengaruh. Pada SQL Server 2008, kesalahan dikembalikan.
KELOMPOKKAN MENURUT Klausa GROUP BY tidak boleh berisi subkueri dalam ekspresi yang digunakan untuk grup menurut daftar. Dalam versi SQL Server yang lebih lama, ini diizinkan. Pada SQL Server 2008, kesalahan 144 dikembalikan.

Misalnya, kode berikut akan berhasil di SQL Server 2005 dan gagal di 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;
Klausa OUTPUT Untuk mencegah perilaku nondeterministik, klausa OUTPUT tidak dapat mereferensikan kolom dari tampilan atau fungsi bernilai tabel sebaris saat kolom tersebut ditentukan oleh salah satu metode berikut:

Subkueri.

Fungsi yang ditentukan pengguna yang melakukan akses data pengguna atau sistem, atau diasumsikan untuk melakukan akses tersebut.

Kolom komputasi yang berisi dalam definisinya fungsi yang ditentukan pengguna yang melakukan akses data pengguna atau sistem.



Saat SQL Server mendeteksi kolom seperti itu dalam klausul OUTPUT, kesalahan 4186 dimunculkan. Untuk informasi selengkapnya, lihat MSSQLSERVER_4186.
Klausa OUTPUT INTO Tabel target klausa OUTPUT INTO tidak dapat memiliki pemicu yang diaktifkan.
opsi tingkat server peringkat precompute Opsi ini tidak didukung di SQL Server 2008. Ubah aplikasi yang saat ini menggunakan fitur ini sesegera mungkin.
Petunjuk tabel READPAST Anda tidak dapat menentukan petunjuk READPAST di bawah Isolasi Rekam Jepret.

Petunjuk READPAST diabaikan saat opsi database READ_COMMITED_SNAPSHOT atau ALLOW_SNAPSHOT_ISOLATION diatur ke AKTIF. Namun, jika Anda menggabungkan petunjuk READPAST dengan READCOMMITTEDLOCK, perilaku READPAST sama dengan petunjuk READCOMMITTED pemblokiran.
sp_helpuser Nama kolom berikut yang dikembalikan dalam kumpulan hasil prosedur tersimpan sp_helpuser telah berubah:

GroupName sekarang:
RoleName

Group_name sekarang:
Role_name

Group_id sekarang:
Role_id

Users_in_group sekarang:
Users_in_role
Transparent Data Encryption Enkripsi data transparan (TDE) dilakukan pada tingkat I/O: struktur halaman tidak terenkripsi dalam memori dan hanya dienkripsi ketika halaman ditulis ke disk. File database dan file log dienkripsi. Aplikasi pihak ketiga yang melewati mekanisme SQL Server reguler untuk mengakses halaman (misalnya, dengan memindai data atau file log secara langsung), akan gagal ketika database menggunakan TDE karena data dienkripsi dalam file. Aplikasi tersebut dapat memanfaatkan WINDOW Cryptographic API untuk mengembangkan solusi untuk mendekripsi data di luar SQL Server.

XQuery

Fitur Deskripsi
Dukungan tanggalwaktu Pada SQL Server 2005, jenis xs:timedata , xs:date, dan xs:dateTime tidak memiliki dukungan zona waktu. Data zona waktu dipetakan ke zona waktu UTC. SQL Server 2008, menyediakan perilaku yang sesuai standar, menghasilkan perubahan berikut:

Nilai tanpa zona waktu divalidasi.

Zona waktu yang disediakan atau tidak adanya zona waktu dipertahankan.

Representasi penyimpanan internal dimodifikasi.

Resolusi nilai yang disimpan ditingkatkan.

Tahun-tahun negatif tidak diizinkan.



Catatan: Ubah aplikasi dan ekspresi XQuery untuk mempertangungjawabkan nilai jenis baru.
Ekspresi XQuery dan Xpath Pada SQL Server 2005, langkah-langkah dalam ekspresi XQuery atau JalurX yang dimulai dengan titik dua (':') diizinkan. Misalnya, pernyataan berikut berisi uji nama (CTR02) dalam ekspresi jalur yang dimulai dengan titik dua.

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

Pada SQL Server 2008, penggunaan ini tidak diizinkan karena tidak sesuai dengan standar XML. Kesalahan 9341 dikembalikan. Hapus titik dua di depan atau tentukan awalan untuk nama test--misalnya, (n$/CTR02) atau (n$/p1:CTR02).

Menyambungkan

Fitur Deskripsi
Menyambungkan dari SQL Server Native Client menggunakan SSL Saat terhubung dengan SQL Server Native Client, aplikasi yang menggunakan "SERVER=shortname; FORCE ENCRYPTION=true" dengan sertifikat yang Subjeknya menentukan Nama Domain yang Sepenuhnya Memenuhi Syarat (FQDN) telah terhubung di masa lalu karena validasi yang dilonggarkan. SQL Server 2008 R2 meningkatkan keamanan dengan memberlakukan subjek FQDN untuk sertifikat. Aplikasi yang mengandalkan validasi yang dilonggarkan harus mengambil salah satu tindakan berikut:

Gunakan FQDN dalam string koneksi.

-Opsi ini tidak memerlukan kompilasi ulang aplikasi jika kata kunci SERVER dari string koneksi dikonfigurasi di luar aplikasi.

-Opsi ini tidak berfungsi untuk aplikasi yang memiliki string koneksi mereka yang dikodekan secara permanen.

-Opsi ini tidak berfungsi untuk aplikasi yang menggunakan Pencerminan Database karena server yang dicerminkan membalas dengan nama sederhana.
Tambahkan alias untuk nama pendek untuk memetakan ke FQDN.

-Opsi ini berfungsi bahkan untuk aplikasi yang memiliki string koneksi mereka yang dikodekan secara permanen.

-Opsi ini tidak berfungsi untuk aplikasi yang menggunakan Pencerminan Database karena penyedia tidak mencari alias untuk menerima nama mitra failover.
Memiliki sertifikat yang dikeluarkan untuk nama pendek.

-Opsi ini berfungsi untuk semua aplikasi.

Perubahan Mencolok di SQL Server 2005

Kami mengakumulasi dan mempertahankan dokumentasi untuk versi Microsoft SQL Server yang sangat lama dalam satu set halaman web arsip. Halaman web yang diarsipkan tidak diproses oleh mesin pencari, seperti Bing.com dan Google.com. Tetapi Anda dapat melihat arsip ini di alamat docs previous-versions/ kami:

Arsip ini mencakup dokumentasi untuk setidaknya versi lama berikut:

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

SQL Server dokumentasi 2014 telah diarsipkan, dan tidak lagi diproses oleh mesin pencari. Artikel 2014 sekarang menyatakan diri mereka dengan NOINDEX dan NOFOLLOW.

Versi terbaru SQL Server, bersama dengan versi terbaru lainnya, di dokumentasikan di sini.

Lihat juga

Fitur Mesin Database yang Tidak Digunakan Lagi pada SQL Server 2014
Perubahan Perilaku pada Fitur Mesin Database di SQL Server 2014
Fungsionalitas Mesin Database yang Dihentikan di SQL Server 2014
SQL Server Kompatibilitas Mundur Mesin Database
UBAH Tingkat Kompatibilitas DATABASE (Transact-SQL)
Melanggar Perubahan pada Fitur Alat Manajemen di SQL Server 2014