2008-12-10 7 views
11

Nimmt man folgende Definition:Wie wird ein nvarchar (max) in einer CLR-UDF zurückgegeben?

/// <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); 
} 

Passing in einem nvarchar(max) Wert für sInput mit einer Länge> 4000 führt der Wert (dh das Ergebnis des Aufrufs dieses UDF nvarchar(4000) zu nvarchar(max) entgegengesetzt ist abgeschnitten ist

Antwort

24
.

Oh, was auch immer, fand ich die Antwort selbst:

/// <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); 
} 

die Idee, SQL-Server, der die Eingabe andeuten und Rückgabewerte sind nicht die Standardeinstellung nvarchar(4000), sondern haben eine andere Größe.

lernte ich einen neuen Trick in Bezug auf Attribute: Sie können ebenso wie die Methode selbst (ganz offensichtlich), aber auch auf den Rückgabewert mit der [return: AttributeName(Parameter=Value, ...)] Syntax der Parameter hinzugefügt werden.

+0

Sie sind ein Star, Sir :) –

+0

Dieser Mechanismus ist explizit in der Referenz beschrieben, die ich zitiert - die Antwort, die Sie abgestimmt haben. – bielawski

Verwandte Themen