2010-05-12 2 views
5

레코드가 삽입되거나 업데이트 될 때 자동으로 "ModifyDate"열을 채우고 싶습니다.SQL Server 2005 - 수정 날짜 열 - 계산 된 열을 올바르게 사용하여 이것을 구현합니까?

트리거를 사용해야합니까, 아니면 계산 열을 사용해야합니까? (SSMS2005 및 SQL Server 2005 Express를 사용)

+2

계산 된 열 것입니다 **하지 ** 작동합니다. 계산 된 열의 값을 GETDATE()로 설정하면 마지막 업데이트가 아닌 * 현재 * 날짜가 항상 반환됩니다. – egrunin

+0

와우 나는 Computed Column이 select에서 다시 계산된다는 것을 몰랐습니다. 감사! –

+1

계산 된 값이 지속되는 경우 어떻게해야합니까? –

답변

5

INSERT 된 부분은 쉽습니다. 단지 열에 기본값을 정의하면 새 행을 삽입 할 때 해당 열에 값을 지정하지 마십시오.

업데이트 부분이 더 까다 롭습니다. trigger that fires ON UPDATE을 작성하고 해당 열을 업데이트해야합니다. SQL Server에서이 작업을 수행 할 다른 방법이 없다고 생각합니다.

질문 : 실제 달력 날짜가 정말로 필요합니까? 그렇지 않은 경우 행이 변경되었는지 여부에 대한 '마커'만 표시하려면 ROWVERSION column type (이전의 경우 TIMESTAMP)을 확인하십시오.

계산 된 열을 어떻게 사용할 수 있을지 모르겠다. 그 날짜를 어딘가에 저장하고 INSERT 및 각 후속 UPDATE로 현재 상태로 유지해야합니다. 트리거 만이이를 관리합니다.

2

난 당신이 기본 제약 조건 대신 계산 열을 의미 가정합니다.

그렇다면 괜찮습니다. 나는 그것을 그렇게하는 것을 더 좋아한다. 한 가지 단점은 클라이언트가 기본값을 무시할 수 있지만 클라이언트를 신뢰하지 않으면 저장 프로 시저에 테이블 액세스를 래핑하는 것입니다.

트리거도 작동하지만 트리거는 추가적인 복잡성을 유발하는 경향이 있습니다. 트리거를 포함하는 코딩 오류는 거기서 가장 힘든 데이터베이스 문제 중 하나입니다.

+2

기본값은 행을 업데이트 할 때 도움이되지 않습니다 .... 그들은 단지 "화재"때 첫 번째 삽입 발생합니다 .... –

3

나는 방아쇠를 멀리하고 getDate 함수를 사용하여 저장 프로 시저로 Date Modified 열을 설정하는 것이 좋습니다.

예 :

업데이트 고객은 FIRSTNAME = '짐'으로 설정, 성 = '존스', DateModified = GETDATE()를