Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Server: Could not find type in the assembly

Assume the assembly dll:

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);         }     } } 

Note: Target the assembly to .NET 3.5 as SQL Server doesn't support .NET 4.0

Copy the assembly to a location, and "creating" the assembly works fine:

CREATE ASSEMBLY CLRFunctions FROM 'c:\Program Files\My App\CLRFunctions.dll'; 

Note: And then enable CLR functions, otherwise they are broken by default:

sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'clr enabled', 1; GO RECONFIGURE; GO 

Created the user-defined function fails:

CREATE FUNCTION NormalizeString(@s nvarchar(max), @normalizationForm varchar(50))  RETURNS nvarchar(max) AS EXTERNAL NAME CLRFunctions.T.NormalizeString 

fails with error:

Msg 6505, Level 16, State 2, Procedure NormalizeString, Line 1 Could not find Type 'T' in assembly 'CLRFunctions'. 

Why can SQL Server not find type T in assembly CLRFunctions?

enter image description here

Note: Why T? Cause Microsoft did.

like image 964
Ian Boyd Avatar asked Oct 19 '11 15:10

Ian Boyd


1 Answers

Try

CREATE FUNCTION NormalizeString(@s nvarchar(max),                                  @normalizationForm nvarchar(50))  RETURNS nvarchar(max) AS EXTERNAL NAME CLRFunctions.[CLRFunctions.T].NormalizeString 
like image 128
Martin Smith Avatar answered Oct 11 '22 19:10

Martin Smith