반응형


김종열

MS SQL Server MVP

엔트리브 소프트



오늘은 기존 프로젝트에 함수를 추가 시키는 과정과

함수에서 인자를 주고 받는 예제를 하나 만들어 볼까 합니다.

 

MSSQL 에서는 함수를 크게 2가지로 나눌수 있습니다.

단일 VALUE RETURN하는 SCALAR함수와 TABLE을 리턴하는 함수가 그것인데요.

이번엔 단일 VALUE RETURN하는 SCALAR함수 하나 만들어보려고 합니다.

 

기능은 EMAIL 주소의 VALID를 체크하는 함수인데요.

또한 이 함수의 기능은 MSSQL2005 WHITE PAPER에 소개된 함수라 많이들 적용하고 있으리라 짐작이 듭니다.

 
1.     기존 프로젝트인 PRJ_CLR OPEN합니다.

2.     사용자 정의 함수를 추가시킵니다. (PROJECT에서 오른 마우스를 클릭 > ADD > NEW ITEM)

 - 개인적으로는 소스를 한 곳에서 관리하시는 것이 개발이나 유지보수 측면에서는 훨씬 더 좋지 않을까 추천합니다.

3.     NEW ITEM에서 사용자 정의 함수를 선택하고 이름을 “UDF_Mail_Check.cs”라고 입력



4.  여기까지 하고 아래와 같은 소스를 입력한다. (소스는 첨부하였습니다.)


부연 설명을 조금 한다면 C# 코드중
using System.Text.RegularExpressions; 부분은정규식을 사용하기 위해 C# Library 사용하겠다는 코드입니다. 붉은 색으로 표시된 부분인 함수 부분에는 SqlBoolean 데이터 처리 Return되는 형식을 sql bool형태로 하겠다는 선언이며 string email 이라는 부분은 함수를 처리할 입력되는 인자는 email이라는 string이라는 선언입니다

C# 정규식이나 함수의 설명, Method 대한 사용은 하지 않겠습니다. (이는 SQL CLR 영역이 아닌 C# 영역이라 생각되어)


5.    Visual Studio의 컴파일 및 배포를 이용하자. (수동으로 하고자 한다면 2강을 참조)


6. 여기까지 이상없었다면 아래의 쿼리로 메일 주소의 VALID를 검사해보자(첨부하였슴)

USE YOULYDB

GO

 

WITH EMAIL_TMP AS (

        SELECT EMAIL_ADDR = 'YOULY_92@HOTMAIL.COM' UNION ALL

        SELECT EMAIL_ADDR = 'YOULY_92HOTMAIL.COM'  UNION ALL

        SELECT EMAIL_ADDR = 'YOULY_92.HOTMAIL.COM'  UNION ALL

        SELECT EMAIL_ADDR = 'YOULY_92@HOTMAIL.CO.KR'  UNION ALL

        SELECT EMAIL_ADDR = 'YOULY_92.COM'  UNION ALL

        SELECT EMAIL_ADDR = 'YOULY_92@COM'

)

SELECT

        EMAIL_ADDR

        , VALID = DBO.UDF_MAIL_CHECK(EMAIL_ADDR)

FROM

        EMAIL_TMP

GO

 

/*

EMAIL_ADDR             VALID

---------------------- -----

YOULY_92@HOTMAIL.COM   1

YOULY_92HOTMAIL.COM    0

YOULY_92.HOTMAIL.COM   0

YOULY_92@HOTMAIL.CO.KR 1

YOULY_92.COM           0

YOULY_92@COM           0

 

(6 row(s) affected)



 

도움파일 : UDF_Mail_Check.cs

          메일주소검증예제.SQL


반응형

'연구개발 > CLR' 카테고리의 다른 글

등록된 DLL 정보 확인하기  (0) 2009.06.22
CLR 강좌 - TEXT파일 읽기  (0) 2009.06.22
CLR 권한 처리 문제  (0) 2009.06.22
CLR 강좌 - CLR_수동배포  (0) 2009.06.22
SQL 2005 따라하기 6 (CLR)  (0) 2009.06.22

+ Recent posts