33
असेंबली डीएल मानें:SQL सर्वर: असेंबली में प्रकार नहीं मिला
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 सर्वर समर्थित नहीं है .NET 4.0
असेंबली को किसी स्थान पर कॉपी करें, और "बनाना" असेंबली ठीक काम करता है:
CREATE ASSEMBLY CLRFunctions FROM 'c:\Program Files\My App\CLRFunctions.dll';
नोट: और उसके बाद सीएलआर फ़ंक्शंस सक्षम करें, अन्यथा वे 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 सर्वर को CLRFunctions
असेंबली CLRFunctions
में क्यों नहीं मिल सकता है?
नोट: T
क्यों? Cause Microsoft did.
महान जवाब का प्रयास करें - यह मेरे SSMS पर अश्लीलता परोसने चिल्लाना पैदा कर रहा था। बनाम 2010 में –
डिफ़ॉल्ट टेम्पलेट डिफ़ॉल्ट रूप से नेमस्पेस नहीं डालता है और इसलिए मेरा पूरी तरह योग्य क्लास नाम गलत था। नोटेशन है: पंजीकृत Assembly नाम। [FullyQualifiedClassName]। FunctionName –
धन्यवाद आपके उत्तर ने मेरी मदद की। –