【发布时间】:2018-03-05 07:57:31
【问题描述】:
我正在使用 MSSQL 中的触发器并收到以下错误消息:
消息 512,级别 16,状态 1,过程 TirregerUpdate,第 11 行 [批处理开始行 0]
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。 该语句已终止。
这些也是我的 sql 代码:
Declare @NAME varchar(255) = 'ONE';
Declare @MKOD varchar(255);
Declare @OMKOD varchar(255);
DECLARE @STATUS BIT = 0;
IF @STATUS = 1
BEGIN
SET @MKOD = CASE @NAME
WHEN 'ONE' THEN '1'
WHEN 'TWO' THEN '2'
WHEN 'TRHEE' THEN '3'
END
SET @OMKOD = CASE @NAME
WHEN 'ONE' THEN '1 - ONE'
WHEN 'TWO' THEN '2 - TWO'
WHEN 'TRHEE' THEN '3 - TRHEE'
END
END
ELSE
BEGIN
SET @MKOD = CASE @NAME
WHEN 'ONE' THEN '1 - ONE'
WHEN 'TWO' THEN '2 - TWO'
WHEN 'TRHEE' THEN '3 - TRHEE'
END
SET @OMKOD = CASE @NAME
WHEN 'ONE' THEN '1'
WHEN 'TWO' THEN '2'
WHEN 'TRHEE' THEN '3'
END
END
UPDATE PRODUCT SET MKOD = @MKOD WHERE MKOD = @OMKOD;
你能帮我解决这种情况吗?谢谢。。
【问题讨论】:
-
错误信息涉及子查询。我在发布的 sql 代码中没有看到任何子查询。
-
这是真实的代码还是示例?因为那里没有任何错误。 dbfiddle.uk/…
-
是的,它真正的代码博客。我想将 '1 - ONE' 更改为 '1' 或 '1' 更改为 '1 - ONE'
-
您的代码完美无误。请发布产生错误的代码
标签: sql-server triggers case