为什么这个if语句总是返回true

时间:2014-12-12 08:01:34

标签: sql if-statement triggers

这是触发器......

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字段为空字符串时拒绝插入或更新。我无法弄清楚为什么if语句总是解析为true,即使TITLE不为空且插入或更新被拒绝。

更新:问题已解决

Lajos让我走上了正确的道路。这就是我修复它的方法......

DECLARE @Title VARCHAR(45)
SELECT @Title = TITLE FROM inserted
IF @Title = ''
   BEGIN
    SET NOCOUNT ON;
    RAISERROR('Missing TITLE',10,1)
    ROLLBACK TRAN

 END

1 个答案:

答案 0 :(得分:2)

您正在检查inserts表中是否有任何记录title为空字符串。我认为条件是正确的,因为你一直至少有这样的记录。

我认为你想要做的是检查插入或更新的记录title是否为空字符串。您应该检查new.title是否为空字符串,而不是在整个表中搜索这样的记录。