2012-11-15 5 views
0

나는 SqlServer 2005를 사용하고 있습니다. 날짜를 업데이트하는 속성 (기본값과 같지만 모든 변경 내용은 삽입하지 않고)을 설정하고 싶습니다. 즉, 모든 업데이트 및 삽입시 현재 날짜가 열에 배치됩니다. 이것이 어떻게 이루어질 것인가?업데이트 날짜, 변경 날짜

+0

각 행의 날짜 또는 하나의 단일 날짜가 어딘가에 있습니까? –

+0

Google "trigger" – texasbruce

+1

아마도 [대신 TRIGGER] (http://msdn.microsoft.com/en-us/library/ms189799(v=sql.90) .aspx)를 찾고있을 것입니다. – ShyJ

답변

1

의 당신이 A 테이블이 있다고 가정하자

CREATE TRIGGER INSTEAD_OF_A_INSERT 
ON A 
INSTEAD OF INSERT AS 
BEGIN 

INSERT INTO A (ID, Name, SomeDate) 
SELECT ID, Name, GETDATE() 
FROM inserted 

END 
GO 

CREATE TRIGGER INSTEAD_OF_A_UPDATE 
ON A 
INSTEAD OF UPDATE AS 
BEGIN 

UPDATE A 
SET SomeDate = GETDATE(), 
    Name = I.Name 
FROM A A1 JOIN INSERTED I ON A1.ID = I.ID 

END 
GO 

당신이 여기

INSERT INTO A (ID, Name) 
VALUES(1, 'John'); 

INSERT INTO A (ID, Name) 
VALUES(2, 'Jack'); 

UPDATE A 
SET Name = 'Jane' 

    SELECT * 
    FROM A 

를 원하는 것을 줄 것이다 당신을 수 fiddle입니다 플레이.

+0

감사합니다. 나는 방아쇠에 조금을 읽었다. 이것은 업데이트/값 직접 삽입 이외의 다른 방법으로 수행 할 수 있습니까? 최선의 옵션을 찾으려고하는데 트리거가 표준 인 것처럼 보입니다. – steventnorris

+0

DB 서버 수준에서 수행하려는 경우 이것이 내가 아는 유일한 방법입니다. – ShyJ

+0

@steventnorris 저장 프로 시저를 통해 데이터 액세스를 제어 할 수 있으면 사용 권한을 올바르게 설정하고 해당 절차를 무시할 수있는 사람을 제어 할 경우 * 필연적으로 트리거가 필요하지 않습니다. 그러나 ad hoc DML을 허용하면 yes입니다 (ad hoc DML을 허용해야하는지 여부는 고려해야 함). –

0

이 작업을 수행하는 가장 쉬운 방법은 트리거를 사용하는 것입니다.

MSDN을 참조하십시오.

정확한 요구 사항에 따라 작업을 수행 할 수있는 AFTER INSERT,UPDATE 또는 INSTEAD OF INSERT,UPDATE 중 하나를 사용할 수 있습니다.

CREATE TABLE A (
    ID INT, 
    Name VARCHAR(20), 
    SomeDate DATE NULL) 

만들 수있는 트리거 :