2011-09-28 3 views
3

SQL Server 프로파일 러를 사용하여 CLR 트리거에서 TSQL이 실행 된 것을 어떻게 볼 수 있습니까?SQL Server 프로파일 러를 사용하여 CLR 트리거에서 TSQL이 실행 된 것을 보는 방법은 무엇입니까?

MS SQL Server DB에 삽입, 업데이트, 삭제를 검사 한 다음 조건에 따라 다른 테이블에 삽입하는 CLR 트리거가 있습니다. SQL Server Profiler 추적 결과를 표시하기 위해 CLR 트리거 내에서 만들어진 T-SQL 삽입을 가져올 수있는 설정이 있습니까?

+1

그냥 궁금해서 ... 원시 SQL에서 수행 할 수없는 논리가 있습니까? – gbn

답변

0

이벤트 선택 탭에서 "모든 이벤트 표시"를 클릭하면 CLR 섹션이 나타납니다. 거기에 하나의 이벤트가 "어셈블리로드"입니다. 이 이벤트는 CLR 어셈블리를로드하라는 요청이있을 때 발생합니다. 어셈블리에서 오는 모든 SQL은 표준 TSQL 이벤트로 등록해야하므로 TSQL 섹션으로 이동하여 모든 "SQL :"이벤트를 선택합니다. 또한 "오류 및 경고"섹션을 확인하십시오. 어셈블리의 설정에 문제가 있거나 SQL 호출 전에 .NET 예외가 발생한다고 가정합니다.

CLR 트리거가 다른 테이블에 대한 조건부 삽입 일 경우 어셈블리를 사용하지 않습니다. 테이블을 자주 선택, 업데이트 또는 삭제할 경우 특히 그렇습니다. 어셈블리는 전용 SQL Server 메모리 공간이 아닌 서버 응용 프로그램 메모리 공간에서 실행되므로 갑자기 SQL Server가 정상보다 많은 응용 프로그램 메모리를 사용하게됩니다. 이런 식으로 SQL 서버를 공평히 추락 시켰습니다.

또한 소스 제어, 빌드가 더 복잡해지고 이해해야하는 몇 가지 보안 문제가 있습니다. 결론적으로 말하자면, SQL Server CLR을 사용하는 것이 마지막 도랑 노력이라고 말하고 싶습니다.

0

코드를 실행하는 방법에 따라 다릅니다. SqlCommand을 사용하고 있습니까? 그렇다면 CommandTypeStoredProcedure 또는 Text으로 설정 하시겠습니까? 및 SQL을 StmtStarting : 당신이 Text의 CommandType을 지정하거나 (Text이 기본이기 때문에), 다음 문은 동적 SQL하고 당신이 SQL을 사용하는 데 필요한 첫 번째 장소에서 CommandType을 지정하지 않는 경우

: StmtCompleted 이벤트는 TSQL 그룹에 있습니다. 트리거의 경우 일 수 있습니다.

당신이 StoredProcedure의 CommandType을 지정하는 경우, 다음 SP를 시도 : 시작SP를 다음 저장 프로 시저에서 이벤트 그룹을 완료.

관련 문제