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

Ian*_*oyd 38 sql-server sqlclr user-defined-functions sql-server-2008-r2

假设程序集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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:将程序集目标指向.NET 3.5,因为SQL Server不支持.NET 4.0

将程序集复制到一个位置,"创建"程序集工作正常:

CREATE ASSEMBLY CLRFunctions FROM 'c:\Program Files\My App\CLRFunctions.dll';
Run Code Online (Sandbox Code Playgroud)

注:然后启用CLR函数,否则会被打破 默认:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
Run Code Online (Sandbox Code Playgroud)

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

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

失败并出错:

Msg 6505, Level 16, State 2, Procedure NormalizeString, Line 1
Could not find Type 'T' in assembly 'CLRFunctions'.
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

注意:为什么T因为微软做了.

Mar*_*ith 85

尝试

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

  • 对于那些阅读过这些因使用MSSQL而筋疲力尽或恶化的人; 请注意括号内...即"命名空间""点""类名"或@Lemblanc正确地将其称为"FullyQualifiedClassName" (11认同)
  • 在vs 2010中,默认模板默认情况下不会放置命名空间,因此我的完全限定类名称不正确.表示法是:RegisteredAssemblyName.[FullyQualifiedClassName] .FunctionName (4认同)
  • 很棒的答案 - 这让我在SSMS尖叫猥亵. (3认同)