Masuk dengan Microsoft
Masuk atau buat akun.
Halo,
Pilih akun lain.
Anda memiliki beberapa akun
Pilih akun yang ingin Anda gunakan untuk masuk.

Gejala

User-Defined Functions (UDF) yang diimplementasikan dalam Transact-SQL dan mengembalikan nilai data tunggal dikenal sebagai T-SQL Scalar User-Defined Functions (UDFs). 

Fitur Scalar UDF Inlining diperkenalkan di Microsoft SQL Server 2019. Fitur ini dapat meningkatkan kinerja kueri yang memanggil T-SQL Scalar UDF di mana eksekusi UDF adalah hambatan utama. T-SQL Scalar UDF Inlining secara otomatis mengubah UDF yang sebaris menjadi ekspresi relasi. 

Pembaruan kumulatif (CU) ini menyertakan beberapa perbaikan di seluruh area berikut ini untuk skenario di mana kueri yang menggunakan Skalar UDF Inlining mungkin mengembalikan pesan kesalahan atau hasil yang tidak diharapkan:

  • Kesalahan tipe ketidakcocokan terjadi jika tipe pengembalian UDF adalah sql_variant (ditambahkan dalam SQL Server 2019 CU2).

  • UDF invocation fromsp_executesqlcancels execution (added in SQL Server 2019 CU2).

  • UDF yang mereferensikan label tanpa perintah GOTO terkait mengembalikan hasil yang salah (ditambahkan di CU2 SQL Server 2019).

  • Kondisi memori yang kehabisan memori dan kebocoran memori terjadi karena UDF skalar yang sangat besar (ditambahkan dalam SQL Server 2019 CU2).

  • Variabel yang tidak terinisialisasi yang digunakan dalam kondisi (IF-ELSE) pernyataan menyebabkan kesalahan (ditambahkan dalam SQL Server 2019 CU2).

  • Kesalahan konversi eksplisit terjadi jika UDF memiliki parameter sql_variant(ditambahkan di SQL Server 2019 CU7).

  • Kesalahan terjadi jika fungsi skalar mereferensikan CHECKSUM(ditambahkan di SQL SERVER 2019 CU7).

  • UDF invocation that has many scalar expression re-evaluations can cause a non-yielding scheduler error (added in SQL Server 2019 CU7).

    Catatan: Perbaikan untuk masalah ini terkadang dapat menyebabkan regresi kinerja. Untuk mengurangi regresi kinerja ini, Anda dapat menonaktifkan perbaikan asli dengan mengaktifkan bendera jejak (TF) 13156.

    Microsoft sedang mengupayakan perbaikan untuk regresi kinerja ini yang akan tersedia di CU mendatang.

  • Kesalahan terjadi jika kueri referensi UDF menggunakan OPTION (RECOMPILE)(ditambahkan di SQL Server 2019 CU7).

  • Kesalahan izin terjadi jika tampilan memanggil UDF inlin (ditambahkan di SQL Server 2019 CU9).

  • Pelanggaran akses terjadi jikaquery_tsql_scalar_udf_inlinedXEvent digunakan (ditambahkan dalam SQL Server 2019 CU9).

  • Perilaku yang tidak konsisten terjadi karena Skalar UDF Inlining tidak menghargai petunjuk kueri QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n(ditambahkan di SQL Server 2019 CU9).

  • UDF inlining berisi agregasi yang dapat menyebabkan kesalahan penjadwal yang tidak menghasilkan (ditambahkan di SQL Server 2019 CU9).

  • Kesalahan kehabisan memori terjadi karena urutan operasi skalar pada variabel yang sama dalam blok bersyarat (ditambahkan dalam SQL Server 2019 CU9).

  • Setelah Anda memutakhirkan ke CU9, pelanggaran akses terjadi jika objek memanggil skalar UDF (UDF1) skalar yang memiliki skalar UDF (UDF2) yang digunakan sebagai parameter input (ditambahkan dalam SQL Server 2019 CU11).

  • UDF inlining dapat menyebabkan kesalahan dan menghasilkan kode kesalahan 6846, 1011, dan 107 (ditambahkan di SQL Server 2019 CU11).

  • Inlining UDFs that run as the non-sysadmin account may return the error message, "A severe error occurred on the current command.  Hasilnya, jika ada, harus dibuang" (ditambahkan di SQL Server 2019 CU16).

  • Pelanggaran akses terjadi jika tabel sementara diminta di dalam UDF menggunakan sinonim (ditambahkan dalam Microsoft SQL Server 2022 CU1 dan SQL Server 2019 CU19).

  • Pelanggaran akses terjadi jika definisi UDF hanya berisi label GOTO dan pernyataanRETURN (ditambahkan dalam SQL Server 2022 CU1 dan SQL Server 2019 CU19).

  • UDF skalar mengembalikan hasil dalam format tanggal dan waktu yang berbeda ketika fitur Skalar UDF Inlining diaktifkan (ditambahkan dalam SQL Server 2022 CU3 dan SQL Server 2019 CU20).

  • File dump dihasilkan jika kueri yang memiliki klausul GROUP BY menggunakan UDF bergaris dalam pernyataan SELECT tanpa fungsi agregat (ditambahkan dalam SQL Server 2022 CU12 dan SQL Server 2019 CU26).

  • Kesalahan "Prosedur maksimum yang disimpan, fungsi, pemicu, atau tingkat penumpukan tampilan melebihi (batas 32)" terjadi jika fitur Skalar UDF Inlining diaktifkan, bahkan jika tingkat penumpukan tidak melebihi (ditambahkan dalam SQL Server 2022 CU12 dan SQL Server 2019 CU26).

  • Kerusakan memori terjadi di sqllang.dll!CProchdr::FDeriveInlineabilityOfScalarUdf jika fitur Skalar UDF Inlining diaktifkan (ditambahkan dalam SQL Server 2022 CU12 dan SQL Server 2019 CU26).

Pembaruan kumulatif ini juga memblokir inlining dalam skenario berikut:

  • Jika UDF mereferensikan fungsi intrinsik tertentu (misalnya, @@ROWCOUNT) yang mungkin mengubah hasil ketika UDF bergaris (ditambahkan dalam SQL Server 2019 CU2).

  • Ketika fungsi agregat diteruskan sebagai parameter ke UDF skalar (ditambahkan dalam SQL Server 2019 CU2).

  • Jika UDF mereferensikan tampilan bawaan (misalnya: OBJECT_ID) (ditambahkan dalam SQL Server 2019 CU2).

  • Jika UDF menggunakan metode XML (ditambahkan di SQL Server 2019 CU4).

  • Jika UDF berisi pernyataan SELECTyang menggunakan klausulORDER BYtetapi tidak TOP 1(ditambahkan dalam CU4 SQL Server 2019).

  • Jika pernyataanSELECT melakukan tugas bersama dengan klausul ORDER BY (misalnya, SELECT @x = @x +1 FROM table ORDER BY column_name) (ditambahkan dalam CU4 SQL Server 2019).

  • Jika UDF berisi beberapa pernyataan RETURN (ditambahkan dalam SQL Server 2019 CU5).

  • Jika UDF dipanggil dari pernyataan RETURN (ditambahkan dalam SQL Server 2019 CU5).

  • Jika UDF mereferensikan fungsi STRING_AGG (ditambahkan dalam SQL Server 2019 CU5).

  • Jika definisi UDF mereferensikan tabel jarak jauh (ditambahkan di SQL Server 2019 CU6).

  • Jika kueri panggilan UDF menggunakan GROUPING SETS, CUBE, atau ROLLUP (ditambahkan dalam CU6 SQL Server 2019).

  • Jika kueri panggilan UDF berisi variabel yang digunakan sebagai parameter UDF untuk penetapan (misalnya, SELECT @y=2, @x=UDF(@y)) (ditambahkan dalam SQL Server 2019 CU6).

  • Jika UDF mereferensikan kolom terenkripsi (ditambahkan di SQL Server 2019 CU11).

  • Jika UDF berisi referensi ke WITH XMLNAMESPACES(ditambahkan dalam SQL Server 2019 CU11).

  • Jika kueri memanggil UDF memiliki Common Table Expressions (CTEs) (ditambahkan di SQL Server 2019 CU11).

  • Jika definisi UDF berisi tabel sementara atau sinonim untuk tabel sementara (ditambahkan dalam SQL Server 2022 CU1 dan SQL Server 2019 CU19).

  • Jika definisi UDF memiliki pernyataanSELECTbersama dengan klausulDISTINCTpada beberapa kolom tugas (ditambahkan dalam CU4 SQL Server 2022 dan SQL Server 2019 CU20).

  • Jika UDF berisi pernyataan SELECT yang menggunakan klausul TABLESAMPLE PERCENT dan beberapa penetapan variabel (ditambahkan dalam SQL Server 2022 CU7).

  • Jika kueri INSERT ada pada tabel yang dirujuk oleh tampilan terindeks yang berisi UDF (ditambahkan dalam SQL Server 2022 CU12 dan SQL Server 2019 CU26).

Setelah memutakhirkan ke SQL Server 2019 CU2, tetapi sebelum memutakhirkan ke SQL Server 2019 CU5, Anda harus mengevaluasi ulang apakah UDF memenuhi syarat untuk inlining. Untuk melakukan ini, refresh UDF skalar yang memenuhi syarat melalui salah satu metode berikut:

  • Jalankan sp_refreshsqlmodule untuk UDF skalar yang berlaku. Untuk informasi selengkapnya tentang prosedur yang disimpan sistem ini, lihat sp_refreshsqlmodule (Transact-SQL).

  • Mengubah atau membuat ulang UDF skalar yang sudah ada dengan menggunakan definisi, izin, dan properti yang sudah ada. Untuk informasi selengkapnya, lihat ALTER FUNCTION (Transact-SQL).

Perintah berikut menghasilkan skrip untuk merefresh metadata dari setiap UDF skalar bergaris inlin yang sudah ada:

/*

Generates a script that can be used to refresh all active inlineable scalar UDFs.

Note The sp_refreshsqlmodule command does not affect any permissions, extended properties, or SET options that are associated with the object.

*/

SELECT 'EXECUTE sys.sp_refreshsqlmodule ''[' + OBJECT_SCHEMA_NAME(object_id) + +'].' + '[' + OBJECT_NAME(object_id)

+ ']'';' AS 'RefreshStatement'

FROM sys.sql_modules

WHERE is_inlineable = 1

AND inline_type = 1;

GO

Catatan: Setelah Anda memutakhirkan ke SQL Server 2019 CU5, kami akan melanjutkan secara otomatis turun UDF inlineability selama kompilasi.

Pemecahan Masalah

Masalah ini telah diperbaiki dalam pembaruan kumulatif berikut untuk SQL Server:

Setiap pembaruan kumulatif baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Lihat pembaruan kumulatif terbaru untuk SQL Server:

Status

Microsoft telah mengonfirmasi bahwa ini adalah masalah dalam produk Microsoft yang tercantum di bagian "Berlaku untuk".

Referensi

Pelajari tentang terminologi yang digunakan Microsoft untuk menjelaskan pembaruan perangkat lunak.

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.

Apakah informasi ini berguna?

Seberapa puaskah Anda dengan kualitas bahasanya?
Apa yang memengaruhi pengalaman Anda?
Dengan menekan kirim, umpan balik Anda akan digunakan untuk meningkatkan produk dan layanan Microsoft. Admin TI Anda akan dapat mengumpulkan data ini. Pernyataan Privasi.

Terima kasih atas umpan balik Anda!

×