アセンブリ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
を見つけられないのはなぜですか?
注:なぜT
? Microsoftが原因。
試す
CREATE FUNCTION NormalizeString(@s nvarchar(max),
@normalizationForm nvarchar(50))
RETURNS nvarchar(max)
AS EXTERNAL NAME CLRFunctions.[CLRFunctions.T].NormalizeString
Visual Studio 2017でこれについて頭蓋骨を破壊し、VBでCLRを構築しました。 SQLでプロシージャを作成するときに、外部名が次のように設定されていることがわかりました。
AssemblyName
.[Assemblyname.ClassNameInVBProgram]
.SubroutineNameInVBProgram
そして、それは大文字小文字を区別します。
使用する Create Assembly
SQLでSQLアセンブリを作成する
使用する Create Procedure
SQLでCLR SPを作成します。