김종열
MS SQL Server MVP
엔트리브 소프트
이번에도 TABLE RETURN함수 입니다.
이번 함수의 역할은 특별한 구분자-저는 여기서 “,”를 사용했습니다.-의 데이터로 구분되어진 파일이 있습니다.
텍스트 파일의 내용은 대강 이렇습니다. (첨부하였습니다.)
1, www.sqllearder.com 2, www.naver.co.kr 3, www.empas.kr |
이 파일의 결과를 쿼리하게 되면 아래와 같은 식이 되게 하는 함수입니다.
NUM |
TXT |
1 |
|
2 |
|
3 |
1. 기존 프로젝트인 PRJ_CLR를 OPEN합니다.
2. 사용자 정의 함수를 추가시킵니다. (PROJECT에서 오른 마우스를 클릭 > ADD > NEW ITEM)
3. NEW ITEM에서 사용자 정의 함수를 선택하고 이름을 “UDF_READ_FILE_2_ARRAY.CS”라고 입력
4. 여기까지 하고 아래와 같은 소스를 입력한다. (소스는 첨부하였습니다.)
using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using Microsoft.SqlServer.Server; using System.IO; using System.Collections; public partial class UserDefinedFunctions { [Microsoft.SqlServer.Server.SqlFunction(FillRowMethodName = "fillTable2", TableDefinition = "Num nvarchar(20), Txt nVarchar(1000)")] public static IEnumerable UDF_READ_FILE_2_ARRAY(SqlString fname) { string[] sItems; StreamReader oSr; char cDelimeter = Convert.ToChar("\n"); string c_fname = Convert.ToString(fname); try { if (File.Exists(c_fname)) { oSr = new StreamReader(c_fname, System.Text.Encoding.Default); sItems = oSr.ReadToEnd().Split(cDelimeter); oSr.Close(); return (sItems); } else { throw new System.Exception("File Not found"); } } catch { return null; } } private static void fillTable2(Object obj, out SqlString Num, out SqlString Txt) { string sTemp = Convert.ToString(obj); string[] arr_temp = sTemp.Split(','); try { Num = (SqlString)arr_temp[0]; Txt = (SqlString)arr_temp[1]; } catch { Num = null; Txt = null; } } }
TABLE DEFINITION부분과 FILLTABLE에서 인자를 갑자기 둘로 주는 부분이 보이시죠?
그 부분이 이번 강의 요입니다. 그리고 저 SPLIT이라는 함수를 눈여겨 봐주십시오. 간단히 설명하면 구분자로 분리하여 문자열(STRING) 배열로 잡는 함수입니다.
5. Visual Studio의 컴파일 및 배포를 해줍니다.
이전 강의를 하셨다면 permition level을 외부 라고 지정이 되어 있을 겁니다.
그렇지 않다면 이전 강의를 참고하시기 바랍니다.
USE YOULYDB GO SELECT * FROM DBO.UDF_READ_FILE_2_ARRAY('C:\TEMP\SAMPLE2.TXT') /* Num Txt 1 www.sqllearder.com 2 www.naver.co.kr 3 www.empas.kr NULL NULL (4 row(s) affected) */
FILLTABLE이나 TABLE DEFINITION은 실무에 맞게 변경하셔서 사용하시기 바랍니다.
도움파일 : UDF_READ_FILE_2_ARRAY.CS
SAMPLE.TXT
'연구개발 > CLR' 카테고리의 다른 글
CLR 강좌 - GREATEST_LEAST 구현하기 (0) | 2009.06.22 |
---|---|
CLR 강좌 - Hostname을 이용한 IP구하기 (0) | 2009.06.22 |
등록된 DLL 정보 확인하기 (0) | 2009.06.22 |
CLR 강좌 - TEXT파일 읽기 (0) | 2009.06.22 |
CLR 강좌_ 함수 인자 주고 받기 (0) | 2009.06.22 |