C# SQL 2005 에서 CLR 사용자 정의 함수 사용하기(괄호안 문자열 제거...) C# General

정규식을 SQL 2005 에서 사용해보자~


using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Text;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;

namespace ClrUtility
{
public partial class ClrUtility
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString fn_RegExMatch(SqlString inpStr, SqlString regExStr)
{
if (inpStr.IsNull || regExStr.IsNull)
return SqlString.Null;
else
{
string strRet = "";
Regex regex = new Regex(regExStr.Value, RegexOptions.Compiled | RegexOptions.IgnoreCase);
MatchCollection matches = regex.Matches(inpStr.Value);
foreach (Match match in matches)
{
strRet += match.Value;
}
return new SqlString(strRet);
}
}
}
}

만들어진 DLL 파일을 SSMS 에서 아래 쿼리를 실행하여 등록 한다.
CLR 가능하게 CONFIGURE 수정
SET NOCOUNT ON;
USE MASTER;
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
GO
USE CASSETTE_MANAGER;


CREATE ASSEMBLY ClrUtility |<->| 1. 사용자 정의 함수 제거(SQL 2005), 2. DROP ASSEMBLY ClrUtility
FROM 'C:\ClrUtility.dll'
WITH PERMISSION_SET = SAFE;
# SAFE: 파일, 네트워크, 환경변수, 레지스트리 등에 접근할 수 없다. 기본값이다.
# EXTERNAL_ACCESS: 파일, 네트워크, 환경변수, 레지스트리 등에 접근할 수 있다.
# UNSAFE: EXTERNAL_ACCESS 권한 + unmanaged 코드 실행 권한


EXTERNAL_ACCESS 이상의 권한을 주기 위해서는 아래와 같은 명령어를 통해 TRUSTWORTHY
속성을 변경 해야 한다.

USE CASSETTE_MANAGER;

CREATE FUNCTION dbo.GetRegExpress
(@inpStr AS NVARCHAR(MAX), @regExStr AS NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
EXTERNAL NAME ClrUtility.[ClrUtility.ClrUtility].fn_RegExMatch;

등록된 DLL 파일을 사용자 정의 함수로 등록 한다.


(테스트 방법)
USE CASSETTE_MANAGER;


SELECT
dbo.GetRegExpress(우하하하하하하(t,b+), '\([^)]*\)') AS TMP_REG_EXP
FROM TABLE_NAME

예) 우하하하하하하(t,b+) ->우하하하하하

변형해서 괄호안 문자열 출력,
매치여부 출력 등등 마음대로~~^^
참조 url
http://msdn.microsoft.com/ko-kr/magazine/cc163473.aspx

덧글

댓글 입력 영역


 

 

트위터 위젯

믹시

믹시