【发布时间】:2021-02-21 09:05:07
【问题描述】:
在 oracle 中我创建触发器没有问题,但在 tsql 中我遇到了一个大问题:)
我有一份工作,他在一个表格中插入行:
SELECT wa.IdAnkiety
,wa.IdUsterkiService
,wa.LiczbaGlosowTak
,wa.LiczbaGlosowNie FROM [SERV-SQL01].[DomTransfer].[dbo].[D5Cts_WynikiAnkiet] wa where not
exists (select wy.IdUsterkiService from dba.DOM_WyAnkiet wy
where wy.IdUsterkiService=wa.IdUsterkiService and
wy.IdAnkiety=wa.IdAnkiety)```
And on this: dba.DOM_WyAnkiet tble I heave a trigger
ALTER trigger [dba].[wyankiet]
on [dba].[DOM_WyAnkiet] AFTER insert
AS
begin
declare @DefectActId uniqueidentifier,
@tak int,
@nie int;
select @DefectActId=IdUsterkiService, @tak=tak, @nie=nie from inserted;
if @tak>@nie
update dba.DefectAct set status='49A86504-2E7D-46AB-A022-FC4C3C8CA853', InspectionDate=GETDATE() where DefectActId=@DefectActId;
if @nie>@tak
update dba.DefectAct set status='2EDA9FB2-8ED2-43AC-8C30-348D3F060CE3',InspectionDate=GETDATE() where DefectActId=@DefectActId;
if @nie=@tak
update dba.DefectAct set status='588B5BAA-F7CE-455D-9489-B2B956949449',InspectionDate=GETDATE() where DefectActId=@DefectActId;
end
但似乎那也行不通 在 oracle 中,我添加 FOR EACH ROW 命令,上面类似的东西是有效的。
【问题讨论】:
-
inserted是插入的行的集合,因此请将其视为行表而不是单行。 -
阅读Bad Habits to Kick : Abusing triggers。您的
TRIGGER假设INSERT仅包含 1 行;这根本不是真的。但是,您在触发器中将InspectionDate设置为GETDATE()似乎很奇怪;为什么不使用DEFAULT值?
标签: sql-server tsql triggers