33
zakładają dll montaż:SQL Server: nie można odnaleźć typu w zespole
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);
}
}
}
Uwaga: target zespół do .NET 3.5, jak SQL Server nie obsługuje .NET 4.0
Skopiuj montaż na miejscu i „tworzenia” zespół działa dobrze:
CREATE ASSEMBLY CLRFunctions FROM 'c:\Program Files\My App\CLRFunctions.dll';
Uwaga: a następnie włączyć CLR Funkcje, w przeciwnym razie są one brokenbydefault:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
Utworzono funkcja zdefiniowana przez użytkownika nie powiedzie się:
CREATE FUNCTION NormalizeString(@s nvarchar(max), @normalizationForm varchar(50))
RETURNS nvarchar(max)
AS EXTERNAL NAME CLRFunctions.T.NormalizeString
nie powiedzie się z powodu błędu:
Msg 6505, Level 16, State 2, Procedure NormalizeString, Line 1
Could not find Type 'T' in assembly 'CLRFunctions'.
Dlaczego nie SQL Server wybrać typ T
w montażu CLRFunctions
?
Uwaga: Dlaczego T
? Cause Microsoft did.
Wielką odpowiedź - to było przyczyną mnie krzyczeć przekleństwa w SSMS. –
w roku 2010 domyślny szablon nie domyślnie umieszcza przestrzeni nazw, dlatego moja w pełni kwalifikowana nazwa klasy była niepoprawna. notacja to: RegisteredAssemblyName. [FullyQualifiedClassName] .FunctionName –
Dzięki twojemu odpowiedziowi pomogło mi to. –