2008-12-10 12 views
11

varsayarak aşağıdaki tanım: değeri kesilmektedirler içindeCLR UDF'de bir nvarchar (maks) nasıl iade edilir?

/// <summary> 
/// Replaces each occurrence of sPattern in sInput with sReplace. This is done 
/// with the CLR: 
/// new RegEx(sPattern, RegexOptions.Multiline).Replace(sInput, sReplace). 
/// The result of the replacement is the return value. 
/// </summary> 
[SqlFunction(IsDeterministic = true)] 
public static SqlString FRegexReplace(string sInput, string sPattern, 
     string sReplace) 
{ 
    return new Regex(sPattern, RegexOptions.Multiline).Replace(sInput, sReplace); 
} 

uzunluğu> 4000 ile sInput için nvarchar(max) değeri belirtildiği (yani, bu UDF çağrı sonucu nvarchar(max) karşı nvarchar(4000) olan sonuçlanır

cevap

24
.

Ah, ne olursa olsun, kendimi cevap buldu:

fikri, SQL Server ipucu etmektir
/// <summary> 
/// Replaces each occurrence of sPattern in sInput with sReplace. This is done 
/// with the CLR: 
/// new RegEx(sPattern, RegexOptions.Multiline).Replace(sInput, sReplace). 
/// The result of the replacement is the return value. 
/// </summary> 
[SqlFunction(IsDeterministic = true)] 
[return: SqlFacet(MaxSize = -1)] 
public static SqlString FRegexReplace([SqlFacet(MaxSize = -1)]string sInput, 
     string sPattern, string sReplace) 
{ 
    return new Regex(sPattern, RegexOptions.Multiline).Replace(sInput, sReplace); 
} 

o giriş ve Dönüş değerleri varsayılan nvarchar(4000) değil, ancak farklı bir boyuta sahip.

Ben nitelikler ile ilgili yeni bir hile öğrendim: Onlar [return: AttributeName(Parameter=Value, ...)] Sözdizimi ile dönüş değeri de parametreleri yanı sıra yöntemin kendisi (oldukça açık) eklenmişse ancak edilebilir.

+0

Bir yıldızsınız, efendim :) –

+0

Bu mekanizma, alıntı yaptığım yanıtta açık bir şekilde açıklanmıştır - aşağıya oy verdiğiniz cevap. – bielawski