【发布时间】:2022-04-06 17:30:38
【问题描述】:
当针对包含另一个用户已存在的电子邮件地址的记录运行以下查询时,我的应用程序在数据库中的“更新后”触发器上引发异常。换句话说,该记录尚未更新,但由于 EXISTS 子句本应被忽略。
有人知道它为什么会触发这个事件吗?或者触发器应该测试一些标志以确保它是一个真正的更新?
我在禁用触发器后测试了我的代码,它完全符合预期,所以我假设我的查询是正确的。
电子邮件地址可以为空,否则它在数据库中必须是唯一的。 .
导致这种情况的查询如下。
UPDATE users
SET EmailAddress = @emailaddress
WHERE
(
RecID = @recid AND fk_Sites_RecID = @fk_sites_recid
AND
(
/* Allow an update when address is being updated with a blank */
( @emailaddress = '' )
/* Address isn't blank, so test it doesn't exist elsewhere */
OR NOT EXISTS
(
SELECT * FROM users
WHERE
NOT ( RecID = @recid AND fk_Sites_RecID = @fk_sites_recid )
AND RTRIM(LTRIM(COALESCE(EmailAddress,''))) = @emailaddress
)
)
)
【问题讨论】:
-
如果没有错误信息,就不会知道出了什么问题。
标签: sql sql-server triggers