행을 수정할 때 날짜 필드와 시간 필드를 업데이트하는 트리거를 만드는 방법은 무엇입니까?


10

testtable데이터베이스 내에 testbase다음과 같은 구조를 가진 테이블을 만들었습니다 .

product_no (int, not null)
product_name (varchar(30), not null)
price (money, null)
expire_date (date, null)
expire_time (time(7), null)

그러나 수정되거나 새로운 정보로 업데이트 된 특정 행을 업데이트하고 수정 날짜를 expire_date필드에 기록 하고 수정 시간을 필드에 기록하도록 트리거를 작성하는 방법은 expire_time무엇입니까? (또는 이것이 가능하다면?)


트리거가 생성되는 방법을 보셨습니까?

예, 트리거가 생성되는 방법 (Ref : msdn.microsoft.com/en-us/library/ms189799(v=sql.105).aspx ) 을 살펴 보았지만 한 가지 문제는 UPDATE를 삽입하는 방법입니다. 다음과 같이 조건을 올바르게 설정하여 트리거되는 행에 대한 설명WHERE id = Changed_Row_ID
Jack

답변:


8

상당히 쉬울 것이지만 실제로는 데이터를 삽입 / 업데이트하는 명령의 논리를 변경 하여이 시점에서 추가 정보를 추가하는 것이 좋습니다.

그러나 트리거를 진행하려면 다음과 같이 할 수 있습니다.

create trigger my_trigger
on my_table
after insert, update
as
begin
declare @dt datetime = getdate();
update a
set expire_date = CONVERT(DATE, @dt, 101),
    expire_time = CONVERT(TIME, @dt)
from my_table as a
join inserted as b 
on a.product_no = b.product_no; 
end
go  

INSERTED테이블을 사용하여 product_no변경 / 생성 된 행 을 찾습니다 . 아래 링크에서 트리거에 대한 자세한 내용을 확인할 수 있습니다.

http://msdn.microsoft.com/en-us/library/ms189799.aspx

이것이 도움이되기를 바랍니다.


MS SQL이 실제로라는 테이블을 형성한다고 생각하지 않았습니다 inserted. 그래서, 같은 이름을 가지고 자신의 데이터베이스 테이블이하지 않는 안전 할 것이라는 것을 의미 하는가 inserted와는 deleted?
Jack

1
네, 혼동을 피하기 위해이 이름을 가진 당신의 테이블을 가지고 있지 않는 것이 좋습니다 ;-)
Mr.Brownstone

트리거 생성 매뉴얼 페이지에서 삽입 / 삭제 된 테이블의 사용을 설명하는 다음 페이지에 대한 링크를 찾을 수 있습니다 ( msdn.microsoft.com/en-us/library/ms191300.aspx )
miracle173
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.