SQL Server:无法在程序集中找到类型

时间:2011-10-19 15:08:31

标签: sql-server sql-server-2008-r2 user-defined-functions sqlclr

假设程序集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);
        }
    }
}

注意:将程序集定位到.NET 3.5,因为SQL Server不支持.NET 4.0

将装配复制到一个位置,“创建”装配可以正常工作:

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

注意:然后启用CLR功能,否则它们是broken by default

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

创建用户定义的函数失败:

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

失败并显示错误:

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

为什么SQL Server在程序集T中找不到类型CLRFunctions

enter image description here

注意:为什么TCause Microsoft did.

2 个答案:

答案 0 :(得分:80)

尝试

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

答案 1 :(得分:2)

我只是在Visual Studio 2017中为此砸了头,在VB中构建了CLR。 我发现,在SQL中创建过程时,外部名称设置如下:

  • AssemblyName[Assemblyname.ClassNameInVBProgram]SubroutineNameInVBProgram

这是区分大小写的。

在SQL中使用Create Assembly创建Sql程序集

在SQL中使用Create Procedure创建CLR SP。