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 语句