연습: SQL CLR 트리거 디버깅
이 항목은 다음 버전에 적용됩니다.
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
---|---|---|---|---|
Express |
||||
Standard |
||||
Pro 및 Team |
이 예제에서는 SQL CLR 트리거의 디버깅 방법을 보여 줍니다. 이 예제에서는 SQL Server 2005와 함께 설치되는 데이터베이스 중 하나인 AdventureWorks 샘플 데이터베이스의 Contact 테이블을 사용합니다. 이 샘플에서는 Contact 테이블에 삽입 SQL CLR 트리거를 새로 만든 다음 해당 코드를 한 단계씩 실행합니다.
SQL CLR 개체를 디버깅하려고 할 때 "사용자가 취소했습니다."라는 메시지가 나타나면 Visual Studio를 실행하는 컴퓨터와 SQL Server를 실행하는 컴퓨터를 모두 수동으로 구성해야 합니다. 자세한 내용은 방법: Transact-SQL 및 SQL CLR 디버깅을 사용하도록 컴퓨터 구성을 참조하십시오.
참고
표시되는 대화 상자와 메뉴 명령은 활성 설정이나 버전에 따라 도움말에서 설명하는 것과 다를 수 있습니다. 설정을 변경하려면 도구 메뉴에서 설정 가져오기 및 내보내기를 선택합니다. 자세한 내용은 설정에 대한 작업을 참조하십시오.
SQL CLR 트리거를 디버깅하려면
새 SQL CLR 프로젝트에서 AdventureWorks 데이터베이스에 대한 연결을 설정합니다. 자세한 내용은 How to: Connect to a Database을 참조하십시오.
아래의 첫 번째 예제 섹션에 있는 코드를 사용하여 새 트리거를 만들고 이름을 iContact.cs로 지정합니다. 자세한 내용은 How to: Develop with the SQL Server Project Type을 참조하십시오.
트리거를 발생시켜 테스트하는 스크립트를 추가합니다. 솔루션 탐색기에서 테스트 스크립트 디렉터리를 마우스 오른쪽 단추로 클릭하고 테스트 스크립트 추가를 클릭한 다음 아래의 두 번째 예제 섹션에 있는 코드를 삽입합니다. truContact.sql이라는 이름으로 파일을 저장합니다. 파일 이름을 마우스 오른쪽 단추로 클릭하고 기본 디버그 스크립트로 설정을 클릭합니다.
iContact.cs에 중단점을 설정한 다음 디버그 메뉴에서 시작을 클릭하여 프로젝트를 컴파일, 배포 및 단위 테스트합니다. 중단점에 노란색 화살표로 표시된 지시 포인터가 나타나면 트리거가 디버깅되고 있는 것입니다.
다른 디버깅 기능을 사용해 봅니다.
SqlTriggerContext를 인스턴스화하는 문으로 돌아갑니다.
지역 창을 엽니다. SqlTriggerContext인 triggContext 변수를 열고 해당 멤버를 검사할 수 있습니다. 자세한 내용은 방법: 디버거 변수 창 사용을 참조하십시오.
참고
서버에서 변수 값의 변경 내용이 디버거 창에 반영되지 않을 수도 있습니다. 자세한 내용은 SQL 디버깅 제한을 참조하십시오.
디버그 메뉴에서 한 단계씩 코드 실행을 선택하여 저장 프로시저를 한 줄씩 실행합니다. 실행을 통해 SqlPipe 형식의 sqlP 변수 값이 인스턴스화됩니다.
조사식 창을 엽니다. sqlP 변수를 끌어 조사식 창의 임의의 위치에 놓습니다. 해당 변수가 조사 변수 목록에 추가됩니다. 자세한 내용은 방법: 디버거 변수 창 사용을 참조하십시오.
참고
조사식 창에서 변수 값을 편집할 수도 있습니다.
텍스트 편집기에서 마지막 줄을 마우스 오른쪽 단추로 클릭하고 중단점 삽입을 클릭합니다.
디버그 메뉴에서 계속을 클릭하면 디버거에서 새 중단점까지의 코드가 실행됩니다.
트리거 디버깅을 마치려면 계속을 다시 클릭합니다. 출력 창에 트리거가 성공적으로 배포되었다는 메시지가 표시되고 truContact.sql 파일의 명령 실행 결과가 표시됩니다.
예제
다음은 이 예제에서 사용하는 트리거를 만드는 데 필요한 코드입니다.
using System;
using System.Data;
using System.Data.Sql;
using Microsoft.SqlServer.Server;
public partial class Triggers
{
// Enter existing table or view for the target and uncomment the attribute line.
[Microsoft.SqlServer.Server.SqlTrigger (Name="Trigger1", Target="primes", Event="FOR UPDATE")]
public static void Trigger1()
{
SqlTriggerContext triggContext = SqlContext.TriggerContext;
SqlPipe sqlP = SqlContext.Pipe;
sqlP.Send("primes inserted!");
}
}
다음은 트리거를 발생시키는 테스트 스크립트입니다.
UPDATE Person.Contact SET MiddleName = 'A' WHERE ContactID = 8