MSSQLSERVER_6522
Berlaku untuk:SQL Server
Detail
Atribut | Nilai |
---|---|
Nama Produk | SQL Server |
ID Peristiwa | 6522 |
Sumber Kejadian | MSSQLSERVER |
Komponen | SQLEngine |
Nama Simbolis | SQLCLR_UDF_EXEC_FAILED |
Teks Pesan | Kesalahan .NET Framework terjadi selama eksekusi rutinitas yang ditentukan pengguna atau agregat "%.*ls": %ls. |
Penjelasan
Pertimbangkan skenario berikut.
Skenario 1
Anda membuat rutinitas runtime bahasa umum (CLR) yang mereferensikan rakitan Microsoft .NET Framework. Rakitan .NET Framework tidak didokumenkan dalam 922672. Kemudian, Anda menginstal perbaikan berbasis .NET Framework 3.5 atau .NET Framework 2.0.
Skenario 2
Anda membuat rakitan, lalu mendaftarkan rakitan dalam database SQL Server. Kemudian, Anda menginstal versi rakitan yang berbeda di Global Assembly Cache (GAC).
Saat Anda menjalankan rutinitas CLR atau menggunakan rakitan dari salah satu skenario ini di SQL Server, Anda menerima pesan kesalahan yang menyerupai berikut ini:
Server: Msg 6522, Tingkat 16, Status 2, Baris 1
Kesalahan .NET Framework terjadi selama eksekusi rutinitas yang ditentukan pengguna atau agregat 'getsid':System.IO.FileLoadException: Tidak dapat memuat file atau rakitan 'System.DirectoryServices, Version=2.0.0.0, Culture=netral, PublicKeyToken=b03f5f7f11d50a3a' atau salah satu dependensinya. Rakitan di penyimpanan host memiliki tanda tangan yang berbeda dari perakitan di GAC. (Pengecualian dari HRESULT: 0x80131050)
Kemungkinan penyebab
Ketika CLR memuat rakitan, CLR memverifikasi bahwa rakitan yang sama ada di GAC. Jika rakitan yang sama ada di GAC, CLR memverifikasi bahwa ID Versi Modul (MVID) dari rakitan ini cocok. Jika MVID rakitan ini tidak cocok, Anda menerima pesan kesalahan yang disebutkan bagian Penjelasan .
Ketika rakitan dikompresi ulang, MVID perakitan berubah. Oleh karena itu, jika Anda memperbarui .NET Framework, rakitan .NET Framework memiliki MVID yang berbeda karena rakitan tersebut dikompresi ulang. Selain itu, jika Anda memperbarui rakitan Anda sendiri, rakitan akan dikompresi ulang. Oleh karena itu, assembly juga memiliki MVID yang berbeda.
Tindakan pengguna
Tindakan 1
Untuk mengatasi skenario 1 di bagian Penjelasan , Anda harus memperbarui rakitan .NET Framework secara manual di SQL Server. Untuk melakukan ini, gunakan ALTER ASSEMBLY
pernyataan untuk menunjuk ke versi baru perakitan .NET Framework di folder berikut:
%Windir%\Microsoft.NET\Framework\Version
Catatan
Versi mewakili versi .NET Framework yang Anda instal atau perbarui.
Tindakan 2
Untuk mengatasi skenario 2 di bagian Penjelasan , gunakan ALTER ASSEMBLY
pernyataan untuk memperbarui rakitan dalam database.
Jika masalah masih ada setelah Anda melakukan ini, hilangkan rakitan dari database, lalu daftarkan versi baru rakitan dalam database.
Informasi selengkapnya
Kami tidak menyarankan Anda menggunakan rakitan .NET Framework yang tidak didokumenkan dalam Kebijakan dukungan untuk rakitan .NET Framework yang belum diuji di lingkungan yang dihosting CLR SQL Server. Ini mencantumkan rakitan yang diuji di lingkungan yang dihosting SQL Server CLR.
Deskripsi rutinitas CLR
Rutinitas CLR mencakup objek berikut yang diimplementasikan dengan menggunakan integrasi SQL Server dengan .NET Framework CLR:
- Fungsi yang ditentukan pengguna bernilai skalar (UDF skalar)
- Fungsi yang ditentukan pengguna bernilai tabel (TVF)
- Prosedur yang ditentukan pengguna (UDP)
- Pemicu yang ditentukan pengguna
- Jenis data yang ditentukan Pengguna
- Agregat yang ditentukan pengguna
Rakitan untuk diperbarui setelah Anda menginstal .NET Framework 3.5
Setelah menginstal .NET Framework 3.5, Anda harus menggunakan pernyataan ALTER ASSEMBLY untuk memperbarui rakitan berikut:
- Accessibility.dll
- AspNetMMCExt.dll
- Cscompmgd.dll
- IEExecRemote.dll
- IEHost.dll
- IIEHost.dll
- Microsoft.Build.Conversion.dll
- Microsoft.Build.Engine.dll
- Microsoft.Build.Framework.dll
- Microsoft.Build.Tasks.dll
- Microsoft.Build.Utilities.dll
- Microsoft.CompactFramework.Build.Tasks.dll
- Microsoft.JScript.dll
- Microsoft.VisualBasic.Vsa.dll
- Microsoft.Vsa.dll
- Microsoft.Vsa.Vb.CodeDOMProcessor.dll
- Microsoft_VsaVb.dll
- Sysglobl.dll
- System.Configuration.Install.dll
- System.Design.dll
- System.DirectoryServices.dll
- System.DirectoryServices.Protocols.dll
- System.Drawing.dll
- System.Drawing.Design.dll
- System.EnterpriseServices.dll
- System.Management.dll
- System.Messaging.dll
- System.Runtime.Serialization.Formatters.Soap.dll
- System.ServiceProcess.dll
- System.Web.dll
- System.Web.Mobile.dll
- System.Web.RegularExpressions.dll
Rakitan ini berada di folder berikut:
%Windir%\Microsoft.NET\Framework\v2.0.50727
Cara mempertahankan data dari jenis data yang ditentukan pengguna setelah Anda menghapus rakitan
Jika Anda menghilangkan rakitan yang digunakan jenis data yang ditentukan pengguna dari SQL Server, Anda dapat menggunakan salah satu metode berikut untuk mempertahankan data.
Asumsikan bahwa berikut ini adalah skenarionya:
- Anda membuat rakitan yang namanya MyAssembly.dll.
- Rakitan MyAssembly mereferensikan perakitan
System.DirectoryServices.dll
. - Anda memiliki jenis data yang ditentukan pengguna yang namanya MyDateTime.
- Jenis data MyDateTime menggunakan rakitan MyAssembly.dll.
- Anda membuat tabel yang namanya MyTable.
- Tabel MyTable berisi data tipe data MyDateTime .
Metode 1: Gunakan utilitas bcp.exe
Gunakan utilitas Bcp.exe bersama dengan tombol -n untuk menyalin data dari tabel MyTable ke dalam file. Misalnya, jalankan perintah berikut pada prompt perintah:
bcp MyDatabase.dbo.MyTable out C:\MyFile.bcp -n -SSQLServerName -T
Di SQL Server Management Studio, ikuti langkah-langkah berikut:
- Letakkan tabel MyTable.
- Jatuhkan jenis data MyDateTime.
- Jatuhkan
System.DirectoryServices.dll
rakitan. - Jatuhkan rakitan MyAssembly.
Di SQL Server Management Studio, ikuti langkah-langkah berikut:
- Daftarkan assembly
System.DirectoryServices.dll
. - Daftarkan rakitan MyAssembly.
- Buat jenis data MyDateTime.
- Buat tabel baru yang memiliki struktur tabel yang sama dengan tabel MyTable.
- Daftarkan assembly
Gunakan utilitas Bcp.exe bersama dengan tombol -n untuk mengimpor data dari file ke dalam tabel MyTable. Misalnya, jalankan perintah berikut pada prompt perintah:
bcp MyDatabase.dbo.MyTable in C:\MyFile.bcp -n -SSQLServerName -T
Metode 2: Gunakan INSERT ... Pernyataan SELECT
Asumsikan bahwa jenis data MyDateTime menempati 9 byte dalam penyimpanan.
Di SQL Server Management Studio, buat tabel baru yang berisi kolom tipe
VARBINARY(9)
data dengan menjalankan pernyataan berikut:CREATE TABLE TempTable (c1 VARBINARY(9));
Jalankan INSERT berikut ini ... Pernyataan SELECT untuk mengisi tabel TempTable:
INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable;
Di SQL Server Management Studio, ikuti langkah-langkah berikut:
- Letakkan tabel MyTable.
- Jatuhkan jenis data MyDateTime.
- Hilangkan rakitan System.DirectoryServices.dll.
- Jatuhkan rakitan MyAssembly.
Di SQL Server Management Studio, ikuti langkah-langkah berikut:
- Daftarkan rakitan System.DirectoryServices.dll.
- Daftarkan rakitan MyAssembly.
- Buat jenis data MyDateTime.
- Buat tabel baru yang memiliki struktur tabel yang sama dengan tabel MyTable.
Jalankan INSERT berikut ini ... Pernyataan SELECT untuk mengisi tabel MyTable:
INSERT INTO MyTable SELECT c1 FROM TempTable;
Referensi
- Untuk informasi selengkapnya tentang versi assembly, lihat Dokumentasi Visual Studio 2005 Pensiun.
- Untuk informasi selengkapnya tentang cara memperbarui rakitan, lihat MENGUBAH ASSEMBLY (Transact-SQL).
- Untuk informasi selengkapnya tentang cara menghilangkan assembly, lihat DROP ASSEMBLY (Transact-SQL).
- Untuk informasi selengkapnya tentang cara mendaftarkan rakitan dalam database SQL Server, lihat MEMBUAT RAKITAN (Transact-SQL).
- Untuk informasi selengkapnya tentang utilitas Bcp.exe, lihat https://msdn2.microsoft.com/library/ms162802.aspx.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk