2011-08-25 3 views
1

트리거 또는 다른 방법을 사용하여 SQL Server Management Studio를 통해 임시 SQL을 실행하는 경우에도 행이 업데이트 될 때 특정 필드가 항상 명시 적으로 설정되도록하는 방법이 있습니까? 구체적으로, 우리 테이블에는 모두 change_note 필드가 있으며, 우리는 항상 필드가 모든 업데이트에 대해 설정되기를 원합니다. 우리가 고려하고 버린 것들 :UPDATE 문에 명시 적 값이 필요합니까?

  1. change_note를 NOT NULL로 설정하십시오. 우리는 그렇게하지만 도움이되지 않습니다. change_note가 초기 값을 가지면 change_note 업데이트를 잊어 버린만큼 많은 UPDATE 문을 실행할 수 있으며 이전 값이 여전히 change_note에 있기 때문에 NOT NULL이 행복하게 유지됩니다.

  2. 트리거를 사용하여 이전 버전의 change_note를 change_note의 새 값과 비교합니다. 때로 change_note를 이전과 같게 설정해야합니다. change_note가 변경되도록하는 것이 아니라 모든 업데이트에 명시 적으로 값이 제공되도록하려는 것입니다.

  3. 임시 SQL을 실행하는 데 대한 사용 권한을 거부하고 모든 사용자가 저장 프로 시저 API를 통해 데이터를 업데이트하고 해당 테이블을 업데이트하는 모든 SP에 대해 change_note를 필수 매개 변수로 설정합니다. 우리는 너무 많은 ad hoc 질의가 필요합니다.

Stumped! 어떤 아이디어?

감사합니다.

+0

트리거가이를 위해 작동해야합니다. 자세한 내용은 방아쇠 내용을 제안하는 데 도움이됩니다 – JNappi

+0

예를 들어, 추가 필드 change_note가있는 표준 ADDRESS 테이블이 있다고 가정 해보십시오. ADDRESS 테이블의 필드가 업데이트 될 때마다 change_note **가 명시 적으로 제공되어야합니다 **. 여기서 명시 적으로 제공되는 change_note가 이미 행에있는 change_note의 값과 일치하는 경우가 발생하기 때문에 change_note가 명시 적으로 제공되었는지 결정하기 위해 이전 값과 새 값의 차이를 찾을 수 없습니다. –

답변

0

# 2를 사용하고 업데이트 트리거 내에서 "때때로"부분을 처리하십시오.

0

업데이트 된 값을 다른 테이블에 삽입하여 (change_note가 NULL이 아닌) 모든 사용자에게 변경 사항을 적용하고 트리거를 사용하여 값을 복사합니까?

0

참조 :

if Update(column) 
    --do whay you want;BEGIN....END; 

당신은에 대한 자세한 정보를 얻을 수 있습니다 트리거를 발생시킨 문이 열 값을 변경하려고하면 그것은 확인합니다 이 게시물 : https://stackoverflow.com/questions/6896834/is-possible-to-restrict-the-db2-database-operators-must-using-where-clause-in 그리고 그것의 의견과 그것에 링크 게시물입니다.

+0

여기에 DB2가 어떤 관련이 있는지 잘 모름 ... –

+0

해당 게시물의 내용은 DB2에만 국한되며 링크되는 게시물은 SQL Server 용입니다.원리는 비슷합니다. – brandong

+0

그래도 SQL Server 관련 게시물에 연결했을 것입니다. 게시물 중 어느 것도 트리거가 업데이트되었는지 여부를 확인하는 것과 같이 쉽게 구현할 수있는 솔루션을 제시하지는 못합니다. 그 자체에 대한 당신의 대답은 주제와는 거리가 떨어져 보였을 것입니다. –

1

트리거가 작업을 수행합니다 (여러 레코드 삽입/업데이트를 처리하도록 작성해야합니다). 그러나 첫 번째와 두 번째 점은 나에게 상호 배타적 인 것처럼 보입니다. null이 충분하지 않으면 변경해야하는 항목을 어떻게 알 수 있습니까? 일종의 비즈니스 규칙이 있습니까?

관련 문제