Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Details
| Attribute | Value |
|---|---|
| Productnaam | SQL Server |
| Gebeurtenis-id | 6522 |
| Bron van gebeurtenis | MSSQLSERVER |
| Onderdeel | SQLEngine |
| Symbolische naam | SQLCLR_UDF_EXEC_FAILED |
| Berichttekst | Een fout in .NET Framework deed zich voor tijdens de uitvoering van door de gebruiker gedefinieerde routine of aggregate "%.*ls": %ls. |
Explanation
Houd rekening met de volgende scenario's.
Scenario 1
Je maakt een common language runtime (CLR) routine die verwijst naar een Microsoft .NET Framework-assembly. De .NET Framework-assemblee is niet gedocumenteerd in 922672. Vervolgens installeer je de .NET Framework 3.5 of een hotfix gebaseerd op .NET Framework 2.0.
Scenario 2
Je maakt een assembly aan en registreert die assembly vervolgens in een SQL Server-database. Vervolgens installeer je een andere versie van de assembly in de Global Assembly Cache (GAC).
Wanneer je de CLR-routine uitvoert of de assembly uit een van deze scenario's gebruikt in SQL Server, krijg je een foutmelding die lijkt op het volgende:
Server: Msg 6522, Niveau 16, Staat 2, Lijn 1
Er trad een fout in .NET Framework op tijdens de uitvoering van een door de gebruiker gedefinieerde routine of geaggregeerde 'getsid':System.IO.FileLoadException: Kon bestand of assembly niet laden 'System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' of een van de afhankelijkheden. Assembly in de hoststore heeft een andere handtekening dan assembly in GAC. (Uitzondering op HRESULT: 0x80131050)
Mogelijke oorzaak
Wanneer de CLR een assembly laadt, verifieert de CLR dat dezelfde assembly in de GAC zit. Als dezelfde assembly in de GAC zit, verifieert de CLR of de Module Version ID's (MVID's) van deze assemblies overeenkomen. Als de MVID's van deze assemblies niet overeenkomen, ontvang je het foutbericht dat in het Uitleggedeelte wordt genoemd.
Wanneer een assembly opnieuw wordt gecompileerd, verandert de MVID van de assembly. Daarom, als je het .NET Framework bijwerkt, hebben de assemblies van het .NET Framework verschillende MVID's omdat die assemblies opnieuw worden gecompileerd. Bovendien, als je je eigen assembly bijwerkt, wordt de assembly opnieuw gecompileerd. Daarom heeft de vergadering ook een andere MVID.
Gebruikersactie
Actie 1
Om scenario 1 in de Uitleg-sectie te omzeilen, moet je handmatig de .NET Framework-assemblies updaten in SQL Server. Om dit te doen, gebruik je de ALTER ASSEMBLY instructie om te wijzen naar de nieuwe versie van de .NET Framework-assembly in de volgende map:
%Windir%\Microsoft.NET\Framework\Version
Note
De versie vertegenwoordigt de versie van het .NET Framework die je hebt geïnstalleerd of bijgewerkt.
Actie 2
Om scenario 2 in de Uitleg-sectie te omzeilen, gebruik je de ALTER ASSEMBLY instructie om de assembly in de database bij te werken.
Als het probleem nog steeds bestaat nadat je dit hebt gedaan, verwijder dan de assembly uit de database en registreer vervolgens de nieuwe versie van de assembly in de database.
Meer informatie
Wij raden niet aan om .NET Framework-assemblies te gebruiken die niet in het Support-beleid zijn gedocumenteerd voor ongeteste .NET Framework-assemblies in de door SQL Server CLR gehoste omgeving. Het geeft een lijst van de assemblies die zijn getest in de door SQL Server CLR gehoste omgeving.
Beschrijving van CLR-routines
CLR-routines omvatten de volgende objecten die worden geïmplementeerd door gebruik te maken van SQL Server-integratie met de .NET Framework CLR:
- Scalair-waarde, door gebruikers gedefinieerde functies (scalair UDF's)
- Tabelwaarde-gebruikersgedefinieerde functies (TVF's)
- Door de gebruiker gedefinieerde procedures (UDP's)
- Door de gebruiker gedefinieerde triggers
- Door de gebruiker gedefinieerde gegevenstypen
- Door de gebruiker gedefinieerde aggregaties
Assemblies die worden bijgewerkt nadat je de .NET Framework 3.5 hebt geïnstalleerd
Nadat je de .NET Framework 3.5 hebt geïnstalleerd, moet je de ALTER ASSEMBLY instructie gebruiken om de volgende assemblies bij te werken:
- 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
Deze assemblies bevinden zich in de volgende map:
%Windir%\Microsoft.NET\Framework\v2.0.50727
Hoe bewaar je de data van door de gebruiker gedefinieerde datatypes nadat je een assembly hebt verwijderd
Als je een assembly verwijdert die een door de gebruiker gedefinieerd datatype van SQL Server gebruikt, kun je een van de volgende methoden gebruiken om de data te behouden.
Stel dat het volgende scenario is:
- Je maakt een assembly aan waarvan de naam MyAssembly.dllis.
- De MyAssembly-assembly verwijst naar de
System.DirectoryServices.dllassembly. - Je hebt een door de gebruiker gedefinieerd datatype met de naam MyDateTime.
- Het MyDateTime-datatype gebruikt de MyAssembly.dll assembly.
- Je maakt een tabel aan met de naam MyTable.
- De MyTable-tabel bevat de gegevens van het MyDateTime-datatype .
Methode 1: Gebruik de bcp.exe hulpdienst
Gebruik de Bcp.exe-utility samen met de -n switch om de data van de MyTable-tabel naar een bestand te kopiëren. Voer bijvoorbeeld het volgende commando uit bij een opdrachtprompt:
bcp MyDatabase.dbo.MyTable out C:\MyFile.bcp -n -SSQLServerName -TVolg in SQL Server Management Studio deze stappen:
- Laat de MyTable-tafel vallen.
- Laat het MyDateTime-datatype vallen.
- Laat de
System.DirectoryServices.dllvergadering vallen. - Laat de MyAssembly-assembly vallen.
Volg in SQL Server Management Studio deze stappen:
- Registreer de
System.DirectoryServices.dllvergadering. - Registreer de MyAssembly-assembly.
- Maak het Datatype MyDateTime aan.
- Maak een nieuwe tabel aan die dezelfde tabelstructuur heeft als de MyTable-tabel.
- Registreer de
Gebruik de Bcp.exe-tool samen met de -n switch om de gegevens uit het bestand te importeren in de MyTable-tabel. Voer bijvoorbeeld het volgende commando uit bij een opdrachtprompt:
bcp MyDatabase.dbo.MyTable in C:\MyFile.bcp -n -SSQLServerName -T
Methode 2: Gebruik de INSERT ... SELECT-verklaring
Stel dat het MyDateTime-datatype 9 bytes in opslag belegt.
In SQL Server Management Studio maakt u een nieuwe tabel aan die een kolom van het
VARBINARY(9)datatype bevat door de volgende instructie uit te voeren:CREATE TABLE TempTable (c1 VARBINARY(9));Voer het volgende INSERT uit ... SELECT-instructie om de TempTable-tabel te vullen:
INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable;Volg in SQL Server Management Studio deze stappen:
- Laat de MyTable-tafel vallen.
- Laat het MyDateTime-datatype vallen.
- Laat de System.DirectoryServices.dll assemblage vallen.
- Laat de MyAssembly-assembly vallen.
Volg in SQL Server Management Studio deze stappen:
- Registreer de System.DirectoryServices.dll vergadering.
- Registreer de MyAssembly-assembly.
- Maak het Datatype MyDateTime aan.
- Maak een nieuwe tabel aan die dezelfde tabelstructuur heeft als de MyTable-tabel.
Voer het volgende INSERT uit ... SELECT-instructie om de MyTable-tabel te vullen:
INSERT INTO MyTable SELECT c1 FROM TempTable;
References
- Voor meer informatie over de assemblyversie, zie Visual Studio 2005 Pensioneerde documentatie.
- Voor meer informatie over hoe je een assembly bijwerkt, zie ALTER ASSEMBLY (Transact-SQL).
- Voor meer informatie over hoe je een assembly kunt laten vallen, zie DROP ASSEMBLY (Transact-SQL).
- Voor meer informatie over hoe een assembly in een SQL Server database geregistreerd kunt worden, zie CREATE ASSEMBLY (Transact-SQL).
- Voor meer informatie over de Bcp.exe nutsvoorziening, zie https://msdn2.microsoft.com/library/ms162802.aspx.