这是触发器...
ALTER TRIGGER [dbo].[trg_rejectNoTitle]
ON [dbo].[FMQI]
FOR INSERT,UPDATE
AS
IF EXISTS (SELECT * FROM inserted WHERE TITLE = '')
BEGIN
SET NOCOUNT ON;
RAISERROR('Missing TITLE',10,1)
ROLLBACK TRAN
END
GO
如您所见,当 TITLE 字段为空字符串时,我想拒绝插入或更新。我不明白为什么即使 TITLE 不为空并且插入或更新被拒绝,if 语句也总是解析为 true。
更新:问题已解决
拉霍斯让我走上了正确的道路。这就是我修复它的方法...
DECLARE @Title VARCHAR(45)
SELECT @Title = TITLE FROM inserted
IF @Title = ''
BEGIN
SET NOCOUNT ON;
RAISERROR('Missing TITLE',10,1)
ROLLBACK TRAN
END
最佳答案
您正在检查 inserts
表中是否有任何记录的 title
为空字符串。我认为这个条件是正确的,因为你至少一直有这样的记录。
我相信您想要做的是检查插入或更新的记录的 title
是否为空字符串。您应该检查 new.title
是否为空字符串,而不是在整个表中搜索此类记录。
关于sql - 为什么这个 if 语句总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27439261/