0
我有這樣的一個表:如何使用條件觸發SQL Server中更新
---------------table1--------------------------------------------
id | name | lname | displayStatus | delStatus
1 a b 1 0
2 aa bb 0 0
3 aaa bbb 1 0
4 aaaa bbbb 0 1
---------------tbl_LOG--------------------------------------------
id | rowData| actType
和我有這個觸發更新:
alter trigger tgr_delete
on table1
after update
as
begin
declare @rowData nvarchar(max), @username nvarchar(50)
if update(delStatus)
begin
if((select delStatus from inserted) = 1)
begin
set @rowData = (select CAST((CAST(id as nvarchar(12)) + ' | ' + name) as nvarchar(max)) from inserted)
exec sp_insert_LOG 'table1', @rowData, 2
end
else if((select delStatus from inserted) = 0)
begin
set @rowData = (select CAST((CAST(id as nvarchar(12)) + ' | ' + name) as nvarchar(max)) from inserted)
exec sp_insert_LOG 'table1', @rowData, 3
end
end
else if update(displayStatus)
begin
if((delStatus = 0 or delStatus is null) and (select displayStatus from inserted) = 0)
begin
set @rowData = (select CAST((CAST(id as nvarchar(12)) + ' | ' + name) as nvarchar(max)) from inserted)
exec sp_insert_LOG 'table1', @rowData, 4
end
else if((delStatus = 0 or delStatus is null) and (select displayStatus from inserted) = 1)
begin
set @rowData = (select CAST((CAST(id as nvarchar(12)) + ' | ' + name) as nvarchar(max)) from inserted)
exec sp_insert_LOG 'table1', @rowData, 5
end
end
end
和我有3個存儲過程
- 第一個用於更新delStatus
- 第二個用於更新displaySt的ATU
- ,三是更新所有列
現在我應該怎麼做,以避免與前兩個條件的干擾。
只需檢查我是否理解問題 - 只有當delStatus或displayStatus被更改時,您才希望觸發器工作,但是如果它們一起更改或者其他列也更改了,則不會觸發。 –
是的。我要這個。 –
SQL語句中的觸發器不是每行都有效。如果你曾經在你的table1上運行多行更新語句,它將會失敗。通過使用主鍵上的內部連接(在這種情況下假設爲id)比較刪除和插入之間的值,可以檢查哪些列已更改。 –