2009-09-04 5 views
3

은 어디서나이를 수행 할 수있는 방법을 찾을 수 없습니다. 업데이트를 실행하는 SQL 트리거가 있습니다. 트리거는 누군가 프로그램에서 사용하는 다른 테이블로 업데이트에 대한 일부 세부 정보를 복사합니다. 전달 된 세부 사항 중에는 갱신 된 컬럼의 이름이 있습니다. 이 (하나 한 번에 있지만) 업데이트되었습니다, 난 그냥 같은 것을 사용할 수있는 많은, 많은 잠재적 인 열 :SQL 업데이트 트리거 열 이름

IF UPDATE(ThisColumn) 
BEGIN 
    Do stuff with ThisColumn 
END 
IF UPDATE(ThatColumn) 
BEGIN 
    Do same stuff with ThatColumn 
END 

을하지만이 표와 나는 많은 열이가 말한대로 본질적으로 똑같은 IF 문장의 페이지를 타이핑하지 않고 업데이트 된 칼럼의 이름을 얻는 멋진 방법이 있어야합니다.

미리 감사드립니다.

+0

My _first_는 설치시 데이터 딕셔너리와 if 문에 대한 템플릿을 실행하여 트리거를 작성하는 코드입니다. 오늘 아침에 코드 예제를 작성할 시간이 없습니다. GBN의 접근 방식은 내가 아는 어떤 것이 아니며, 상당히 강력하게 들리기 때문에 조사 할 것입니다. –

답변

2

여기에서 파생 된 수는 sys.columns.column_id 내가 예를 작업해야하는 데 사용

에 매핑,하지만 더 이상

거대한 잡았다 COLUMNS_UPDATED

Example usage 1, database journal

Example usage 2, KB 232195 를 사용할 수의 때문에 metadata visibility, sys.columns 조인이 실패 할 수 있습니다. 이것은 teh 콜이 저장된 proc로 싸여있는 경우에 특히 중요하다. 트리거에서 "EXECUTE AS OWNER"를 사용해야합니다.