web-dev-qa-db-ja.com

SQL Server:アセンブリで型が見つかりませんでした

アセンブリ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);
        }
    }
}

:SQL Serverは.NET 4.0をサポートしていないため、アセンブリを.NET 3.5にターゲティングします

アセンブリをある場所にコピーして、アセンブリを「作成」すると正常に機能します。

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

注:次にCLR関数を有効にします。それ以外の場合は brokenbydefault

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

:なぜTMicrosoftが原因。

38
Ian Boyd

試す

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

Visual Studio 2017でこれについて頭蓋骨を破壊し、VBでCLRを構築しました。 SQLでプロシージャを作成するときに、外部名が次のように設定されていることがわかりました。

  • AssemblyName.[Assemblyname.ClassNameInVBProgram].SubroutineNameInVBProgram

そして、それは大文字小文字を区別します。

使用する Create Assembly SQLでSQLアセンブリを作成する

使用する Create Procedure SQLでCLR SPを作成します。

2
Sonny