Assumer le dll de montage:SQL Server: Impossible de trouver le type dans l'assemblage
using Microsoft.SqlServer.Server;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System;
using System.Text;
namespace CLRFunctions
{
public class T
{
[SqlFunction(DataAccess = DataAccessKind.Read)]
public static String NormalizeString(String s, String normalizationForm)
{
NormalizationForm form = NormalizationForm.FormC;
if (String.Equals(f, "FormD", StringComparison.OrdinalIgnoreCase))
form = NormalizationForm.FormD;
return = s.Normalize(form);
}
}
}
Remarque: Cible de l'ensemble de .NET 3.5 que SQL Server ne prend pas en charge .NET 4.0
Copiez l'ensemble à un emplacement, et « créer » l'ensemble fonctionne très bien:
CREATE ASSEMBLY CLRFunctions FROM 'c:\Program Files\My App\CLRFunctions.dll';
note: puis activez CLR fonctions, sinon ils sont brokenbydefault:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
Créé la fonction définie par l'utilisateur échoue:
CREATE FUNCTION NormalizeString(@s nvarchar(max), @normalizationForm varchar(50))
RETURNS nvarchar(max)
AS EXTERNAL NAME CLRFunctions.T.NormalizeString
échoue avec l'erreur:
Msg 6505, Level 16, State 2, Procedure NormalizeString, Line 1
Could not find Type 'T' in assembly 'CLRFunctions'.
Pourquoi peut SQL Server trouver le type T
dans l'assemblage CLRFunctions
?
Remarque: Pourquoi T
? Cause Microsoft did.
Grande réponse - ce me faisait crier des obscénités à SSMS. –
vs 2010 le modèle par défaut ne met pas l'espace de noms par défaut et par conséquent mon nom de classe pleinement qualifié était incorrect. la notation est: RegisteredAssemblyName. [FullyQualifiedClassName] .FunctionName –
Merci votre réponse m'a aidé. –