UPDATE CASE 中的 SIGNAL SQLSTATE

Posted

技术标签:

【中文标题】UPDATE CASE 中的 SIGNAL SQLSTATE【英文标题】:SIGNAL SQLSTATE inside UPDATE CASE 【发布时间】:2014-09-12 09:40:36 【问题描述】:

我无法在现场尝试 TRIGGER,我有一个问题。我试图寻找答案但没有成功。那么,是否可以在 DB2 TRIGGER 的 UPDATE CASE 中放入“SIGNAL SQLSTATE...”?

例如:

CREATE TRIGGER T1
[...]
BEGIN ATOMIC

UPDATE Table
  SET column = 
    CASE
      WHEN [...] 
        THEN SIGNAL SQLSTATE '70000' ('ERROR')
      ELSE 
[...]

提前谢谢你。

【问题讨论】:

将其作为 result-expression 放入 CASE 表达式 意味着您要将 column 设置为等于SIGNAL SQLSTATE '70000' ('ERROR')。这根本没有意义。 对!我认为这是一个可以接受的答案。谢谢。 @user2338816 请用你写的评论写一个答案。 【参考方案1】:

CASE 表达式 不能在 UPDATE 语句中执行语句。它只返回一个结果值。如果你想执行SIGNAL SQLSTATE...这样的语句,我想你可能会这样使用它(不推荐也不测试):

IF ( CASE WHEN [...condition] THEN true ELSE false END )
   THEN SIGNAL SQLSTATE '70000' ('ERROR') ;
   ELSE UPDATE Table  SET column = [...value] ;

但是,最好像这样简单地这样做:

IF ( [...condition] )
   THEN SIGNAL SQLSTATE '70000' ('ERROR') ;
   ELSE UPDATE Table  SET column = [...value] ;

如果没有更详细地说明确切的意图,就很难确定需要什么。

【讨论】:

以上是关于UPDATE CASE 中的 SIGNAL SQLSTATE的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL:在 UPDATE 语句中使用 CASE 根据条件更新某些列

sql2005中的case when语句怎么用啊?请写出一个常见的例子

A Sample To use Update, InnerJoin, When/Case, Exists in SQL Server

Redshift 中的 update + case + join 语句

SQL Server 2008 update语句只能更新1行数据?

SQL 中UPDATE用法