sqlserver2008中的case子查询

sqlserver2008中的case子查询,sql,sql-server-2008,case,Sql,Sql Server 2008,Case,下面的语句给出了一个错误 印刷箱 存在时,从tblCustomerProductsDiscount PD中选择count*,其中PD.cust\u ID=138,PD.pack\u detl\u ID=1,然后0结束 错误: 在此上下文中不允许子查询。只允许使用标量表达式。首先,虽然您的意图非常明确,但当前形式的脚本没有意义,原因如下 您正在检查select count*…中是否存在行。。。subselect,但事实是,COUNT总是返回一个值。如果指定条件没有行,它将返回0,但该行仍然是子查询

下面的语句给出了一个错误

印刷箱 存在时,从tblCustomerProductsDiscount PD中选择count*,其中PD.cust\u ID=138,PD.pack\u detl\u ID=1,然后0结束

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

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

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

要修复它,只需将select count*替换为select*

另一件事是错误。在此上下文中不允许子查询,也就是说。使用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;

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

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

要修复它,只需将select count*替换为select*

另一件事是错误。在此上下文中不允许子查询,也就是说。使用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;

只需在打印后添加一个SELECT。这样就可以解决问题并消除错误。存在时打印选择案例从tblCustomerProductsDiscount PD中选择计数*,其中PD.cust_ID=138和PD.pack_detl_ID=1,则0结束不使用现有的计数。效率非常低。它会给出相同的错误。只需在打印后添加一个SELECT。这样就可以解决问题并消除错误。存在时打印选择案例从tblCustomerProductsDiscount PD中选择计数*,其中PD.cust_ID=138和PD.pack_detl_ID=1,则0结束不使用现有的计数。效率非常低。它会产生相同的错误。