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

标签 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 字段为空字符串时,我想拒绝插入或更新。我不明白为什么即使 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/

相关文章:

c++ - if 语句中的复合表达式

vba - 使用 If 子句循环某个范围

sql - VBA在访问功能中按日期搜索

java - INSERT 操作在使用 Java 的 SQLITE 中不起作用

string - IF 函数识别单元格的第一个字符

mysql - 如何在mysql触发器中将点(.)连接到像pic.jpeg这样的字符串?

mysql - 使用触发器自动更新/填充 MySQL 中的 DATETIME 列

sql-server - 根据更新后触发器插入更改日志

sql - 在 PgAdmin 中添加外键

php - 完全相同的 MySQL 表结构/数据,相同查询的不同结果