sql server 2008中的case子查询

Rau*_*auf 1 sql case sql-server-2008

以下语句给出错误

打印(存在时的情况(从 tblCustomerProductsDiscount PD 选择 count(*),其中 PD.cust_ID=138 且 PD.pack_detl_ID = 1),然后 0 结束)

错误: 在此上下文中不允许子查询。仅允许使用标量表达式。

And*_*y M 5

首先,虽然您的意图非常明确,但当前形式的脚本没有意义,原因如下。

您正在检查子选择中是否存在行select count(*)...,但事实是,COUNT() 总是返回一个值。如果没有符合指定条件的行,它将返回0,但这仍然是子查询返回的行,并且在任何情况下EXISTS都会计算为TRUE

要修复它,只需替换select count(*)select *.

另一件事是错误。在这种情况下子查询是不允许的,这是最终的。您不能以PRINT任何形式使用子查询。将结果存储在变量和PRINT变量中:

declare @result int;
set @result = case
  when exists (
    select *
    from tblCustomerProductsDiscount PD
    where PD.cust_ID=138 and PD.pack_detl_ID = 1
  )
    then 0
end

print @result;
Run Code Online (Sandbox Code Playgroud)