リンクhttp://msdn.microsoft.com/en-us/magazine/cc163473.aspxのClr関数を改善しようとしています。
public static partial class UserDefinedFunctions
{
public static readonly RegexOptions Options =
RegexOptions.IgnorePatternWhitespace |
RegexOptions.Singleline;
[SqlFunction]
public static SqlBoolean RegexMatch(
SqlChars input, SqlString pattern)
{
Regex regex = new Regex( pattern.Value, Options );
return regex.IsMatch( new string( input.Value ) );
}
}
を実行するselect * from Table1 where dbo.RegexMatch(col1, 'pattern') = 1
と、Clr関数はテーブルの各行に新しい正規表現オブジェクトを作成します。
SQLステートメントごとに1つの正規表現オブジェクトのみを作成することは可能ですか?各行について、を呼び出すだけregex.Ismatch(...)
です。次のコードは有効ですか?
public static partial class UserDefinedFunctions
{
public static readonly RegexOptions Options =
RegexOptions.IgnorePatternWhitespace |
RegexOptions.Singleline;
static Regex regex = null;
[SqlFunction]
public static SqlBoolean RegexMatch(
SqlChars input, SqlString pattern)
{
if (regex == null)
regex = new Regex( pattern.Value, Options );
return regex.IsMatch( new string( input.Value ) );
}
}