Bagikan melalui


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

  1. 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
    
  2. Di SQL Server Management Studio, ikuti langkah-langkah berikut:

    1. Letakkan tabel MyTable.
    2. Jatuhkan jenis data MyDateTime.
    3. Jatuhkan System.DirectoryServices.dll rakitan.
    4. Jatuhkan rakitan MyAssembly.
  3. Di SQL Server Management Studio, ikuti langkah-langkah berikut:

    1. Daftarkan assembly System.DirectoryServices.dll .
    2. Daftarkan rakitan MyAssembly.
    3. Buat jenis data MyDateTime.
    4. Buat tabel baru yang memiliki struktur tabel yang sama dengan tabel MyTable.
  4. 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.

  1. 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));
    
  2. Jalankan INSERT berikut ini ... Pernyataan SELECT untuk mengisi tabel TempTable:

    INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable;
    
  3. Di SQL Server Management Studio, ikuti langkah-langkah berikut:

    1. Letakkan tabel MyTable.
    2. Jatuhkan jenis data MyDateTime.
    3. Hilangkan rakitan System.DirectoryServices.dll.
    4. Jatuhkan rakitan MyAssembly.
  4. Di SQL Server Management Studio, ikuti langkah-langkah berikut:

    1. Daftarkan rakitan System.DirectoryServices.dll.
    2. Daftarkan rakitan MyAssembly.
    3. Buat jenis data MyDateTime.
    4. Buat tabel baru yang memiliki struktur tabel yang sama dengan tabel MyTable.
  5. Jalankan INSERT berikut ini ... Pernyataan SELECT untuk mengisi tabel MyTable:

    INSERT INTO MyTable SELECT c1 FROM TempTable;
    

Referensi