2009-07-14 2 views
1

SQL Server에 트리거가 있지만 CLR 코드에 인수를 전달해야합니다 (즉, 트리거 컨텍스트에서 제공되지 않은 정보).외부 (CLR) SQL Server 트리거에 인수를 전달할 수 있습니까?

이렇게해도 될까요?

CREATE TRIGGER MyTrigger ON MyTable FOR INSERT 
AS EXTERNAL NAME MyAssembly.MyNamespace.MyTriggerHandler("Foo", "Bar") 

이러한 인수는 물론 정적 일 수 있습니다.

인수 치환 수는 서로 다르지만 각 클래스에 대해 CLR 어셈블리에서 별도의 클래스 나 함수를 만드는 것은 다루기 힘들며 다른 트리거가 필요할 때마다 피하고 싶은 컴파일/배포 단계가 필요합니다.

답변

1

을 조금 연구 후에, 내가 할 수없는, 수행 할 작업을 나타납니다.

트리거 "외부 이름"절을 사용하여 전달 된 메서드에는 매개 변수가 필요하지 않으며 CREATE TRIGGER 문에서 SqlTriggerContext를 수정할 수 없습니다.

나는 순열 경로를 가고 결국 지원되는 인수의 변형이 적어졌다. 아마도 .NET 통합은 다음에 좀 더 강력해질 것입니다.

+0

일반 트리거에도 매개 변수를 전달할 수 없습니다. 왜 SQLCLR 트리거에 매개 변수를 사용 하시겠습니까? INSERTED, DELETED 테이블은 SQLCLR 트리거 내부에서 일반적인 트리거 내부와 마찬가지로 쿼리 할 수 ​​있습니다 –

1

어떤 의미에서 T-SQL 또는 SQLCLR이든간에 트리거에 정보를 전달할 수는 있지만 질문에 직접 표시하는 것은 아닙니다. SQL 서버 2016에

  1. 지역 임시 테이블
  2. SET CONTEXT_INFO/CONTEXT_INFO
  3. : 아직도, 당신은 사건의 체인의 모든 트리거에 DML 작업 자체의 일부가 아닌 정보를 전달하는 2 ~ 3 가지 옵션이 있습니다 이상 : 모든 경우에 sp_set_session_context/SESSION_CONTEXT

당신이 출력를 가진이 SqlCommand (연결 문자열로 "Context Connection = true;" 사용) 실행하여 값을 얻을 것을 사용하여 값을 .NET 코드로 가져옵니다.

관련 문제