我有一个触发器,可以在插入另一个表之前检查数据
IF NOT EXISTS (SELECT *
FROM inserted,
Clients
WHERE Inserted.Account = Clients.Account)
BEGIN
INSERT INTO Clients(GUID, Account, ....)
SELECT GUID, Account
FROM inserted
END
如果更新了一行,它的工作正常 但如果使用批量更新它不起作用。
例如Update Table1 set Number = Number where account <> ''
如果第二个表(客户端)不为空,则不添加任何内容
如果这是空的,那就好了
答案 0 :(得分:4)
为什么不将它写成单个INSERT
语句,而不是进行检查然后插入:
Insert into Clients (GUID , Account .....)
Select i.GUID , i.Account
from
inserted i
left join
Clients c
on
i.Account = c.Account
where
c.Account is null
NULL
子句中的WHERE
检查可以针对Clients
中不可为空的任何列。
即使你保持EXISTS
签入,你仍然需要类似上面的内容,因为EXISTS
检查是在{{{>>所有行中声明了一些内容1}} - 当它可能包含断言为真的某些行,以及某些行为假的行。