33

タイプが見つかりませんでしたアセンブリDLLを想定しますSQL Serverの:アセンブリ

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

:なぜTCause Microsoft did.

答えて

73

はグレート答え

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

を試してみてください - これは私がSSMSでひわいな言葉を叫びさせました。 –

+3

vs 2010ではデフォルトテンプレートではデフォルトで名前空間が設定されないため、完全修飾クラス名が正しくありませんでした。表記は:RegisteredAssemblyName。[FullyQualifiedClassName] .FunctionName –

+0

あなたの答えは私の助けになりました。 –

関連する問題