SQL Server: не удалось найти тип в сборке - PullRequest
36 голосов
/ 19 октября 2011

Предположим, сборка 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, в противном случае они будут сломаны по умолчанию :

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

Примечание : Почему T? Причина Microsoft сделала.

Ответы [ 2 ]

82 голосов
/ 23 октября 2011

Попробуйте

CREATE FUNCTION NormalizeString(@s nvarchar(max), 
                                @normalizationForm nvarchar(50)) 
RETURNS nvarchar(max)
AS EXTERNAL NAME CLRFunctions.[CLRFunctions.T].NormalizeString
2 голосов
/ 06 февраля 2019

Я только что сломал свой череп в Visual Studio 2017, создавая CLR в VB.Что я выяснил, при создании процедуры в SQL ВНЕШНЕЕ ИМЯ устанавливается следующим образом:

  • AssemblyName. [Assemblyname.ClassNameInVBProgram]. SubroutineNameInVBProgram

Ион чувствителен к регистру.

Используйте Create Assembly в SQL для создания сборки Sql

Используйте Create Procedure в SQL для создания CLR SP.

...