Presentation is loading. Please wait.

Presentation is loading. Please wait.

정 홍주 웹타임/책임 Microsoft .NET Advisor

Similar presentations


Presentation on theme: "정 홍주 웹타임/책임 Microsoft .NET Advisor"— Presentation transcript:

1 정 홍주 웹타임/책임 Microsoft .NET Advisor hongju@wtime.net
SQL Server 2005에서의 CLR 정 홍주 웹타임/책임 Microsoft .NET Advisor

2 세션 구성 SQL Sever 2005에서의 개발 데이터베이스에서의 관리 코드 SQLCLR과 T-SQL의 비교

3 SQL Server 2005에서의 개발

4 SQL Server 2005에서의 개발 SQL Server 2005 Data Transformation Services
Analysis Services Notification Services SQL Server 2005 Full-Text Search Relational Database Engine Reporting Services .NET CLR Replication Service Broker Native HTTP Support

5 Relational data access
선택에 대한 딜레마 Computation & Framework access T-SQL CLR ? XML Semi-structured data access Relational data access

6 데이터베이스에서의 관리 코드 .NET hosted in SQL Server = "SQLCLR“ 관리 데이터베이스 개체
저장 프로시저, 사용자 정의 함수 트리거, 사용자 정의 형식 사용자 정의 집계 모든 .NET 언어에 의해 지원 Visual Studio .NET과의 통합 SQLCLR 개체의 생성 및 배포 SQL Server Project VS.NET에서의 디버깅 지원

7 Assembly: “TaxLib.dll”
데이터베이스에서의 관리 코드 Microsoft® Visual Basic .NET, C#, … Build Assembly: “TaxLib.dll” Microsoft® Visual Studio® .NET Project deploy SQL Data Definition: create assembly … create function … create procedure … create trigger … create type … Runtime hosted inside SQL SQL Queries: select sum(tax(sal,state) ) from Emp where county = ‘King’ Microsoft® SQL Server™

8 데이터베이스에서의 관리 코드 SQLCLR SQL Server와 같은 주소공간에서 실행 SQL 외부의 자원 활용 가능
SQL Server Process T-SQL function user .Net code database

9 관리되는 데이터베이스 개체 저장 프로시저 사용자 정의 함수 트리거 사용자 정의 형식 사용자 정의 집계

10 관리되는 데이터베이스 개체 저장 프로시저 Class에서 pubic, static 메서드 Void, int를 반환
SqlPipe.ExecuteAndSend, SqlPipe.Send…, public static void ExecuteToClient() { using (SqlConnection con = new SqlConnection("context connection=true")) { con.Open(); SqlCommand cmd = ..., SqlContext.Pipe.ExecuteAndSend(cmd); }

11 관리되는 데이터베이스 개체 사용자 정의 함수 Scalar-Valued 함수 - single 값 반환
Table-Valued 함수 - IEnumerable 개체 반환 public static IEnumerable RSS_TVF() { return new RssReader(); }

12 관리되는 데이터베이스 개체 트리거 SqlTriggerContext 이용 SqlTrigger 어트리뷰트 이용
- Name, Target, Event 속성 정의 SqlTriggerContext trg = SqlContext.TriggerContext; if (trg.TriggerAction == TriggerAction.Update) { if (trg.IsUpdatedColumn(7) == true) //send to each new contact }

13 관리되는 데이터베이스 개체 사용자 정의 형식 사용자 정의 형식에 대한 정렬,비교 (예, ‘X.Y’) INullable에서 파생
Null, Parse, ToString, IsNull 구현 public struct Point : INullable { public override string ToString() { } public bool IsNull { } public static Point Null { } public static Point Parse(SqlString s) { } }

14 관리되는 데이터베이스 개체 사용자 정의 집계 Sum, Avg 같은 집계함수의 사용자 정의
Init, Accumulate, Merge, Terminate 메서드 생성 public void Init() {…} public void Accumulate(SqlString Value){…} public void Merge(CommaDelimit Group){…} public SqlString Terminate(){…}

15 SQLCLR 개체 생성 및 배포 ,디버깅

16 SQLCLR과 T-SQL의 비교 T-SQL SQLCLR 인터프리트 방식 복잡한 프로시저 코드에 대해서는 제한적
데이터 중심의 접근은 유리 SQLCLR 컴파일 방식 복잡한 프로시저 코드에 대해서 유리 .NET BCL 이용

17 사용자 정의 함수 T-SQL SQLCLR 인터프리트 방식으로 SQLCLR이 더 빠름
T-SQL은 Worktable에 결과를 저장 SQLCLR UDF 이용 계산에 활용 계산시 데이터 액세스 오버헤드 없이 사용 가능 SqlFunction – DataAccessKind 속성 다중 문에는 TVF가 유리 IEnumerator, IEnumerable

18 외부 자원 액세스 SQLCLR 외부 자원 액세스에 유리 File System Event Log
Web Service Client Registry

19 Syntax Check T-SQL SQLCLR Static SQL CREATE PROC 시점 check
CREATE FUNCTION 시점 check Determinism, Precision SQLCLR Dynamic, 런타임에 에러 발생 SqlFunction 속성

20 데이터 액세스 T-SQL SQLCLR SQL을 호출하는데 효과적 SQL과 데이터 버퍼와 스택 프레임 공유 스택 프레임 분리
Native->관리코드로 오버헤드 발생 SqlContext가 데이터 액세스를 캡슐화

21 매개 변수 T-SQL SQLCLR 입력(Input) 매개 변수 출력(Output) 매개 변수 - INOUT
ByVal=T-SQL Input ByRef=T-SQL Output Out= 없음

22 데이터 형식 SQLCLR 기본 .NET 타입-데이터베이스에서의 null 이 없음
“RETURNS NULL on NULL INPUT” 이용 - 사용자 정의 함수에서 사용 System.Data.SqlTypes 이용 - SQL과 .NET 데이터 형식의 매치 - Null 처리에 용이 VARCHAR, TIMESTAMP 표현에 제한

23 SQLCLR Pipelined Result
T-SQL 결과는 완료했을때 가용 완료되기 전까지는 row를 가져올 수 없음 한번에 하나씩 가져오거나 Pipeline SQLCLR SqlPipe 최적화 SendResultsStart SendResultRow SendResultEnd

24 SQLCLR 데이터 액세스 SQLCLR은 ADO.NET을 이용 SqlClient와 클래스 공유 추가 서버측 클래스
Microsoft.SqlServer.Server.SqlContext SqlPipe WindowsIndentity SqlTriggerContext SQLCLR은 데이터베이스 자원을 이용 상황에 따라 서버와 클라이언트에서 적절히 활용 DBA의 관심 요구

25 세션 요약 T-SQL 사용 SQLCLR 사용 기본적인 데이터 액세스 처리 CLR 로드 되지 않는 동작 SQL 동작을 래핑
사용자 정의 함수 계산 집중적인 저장 프로시저, 복잡한 로직 SQL Server 외부 자원 액세스 T-SQL에서 제공되지 않는 기능 (.NET BCL 사용)

26 참고자료 MSDN On-Demand Webcasts MSDN SQL Develop Center
SQL Server 홈 MSDN On-Demand Webcasts

27 © 2004 Microsoft Corporation. All rights reserved.
This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.


Download ppt "정 홍주 웹타임/책임 Microsoft .NET Advisor"

Similar presentations


Ads by Google