2011-03-04 67 views
1

以下内容陈述给出了一个错误情况下的子查询2008

打印(情况 当从tblCustomerProductsDiscount PD其中PD.cust_ID = 138和PD.pack_detl_ID = 1),则存在0(SELECT COUNT(*)结束)

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

+0

不要使用exists(count)。效率很低。 – 2011-03-04 07:04:04

+0

只需在打印后添加** SELECT **即可。应该做的伎俩,并消除你的错误。 **打印(选择存在时的案例(从tblCustomerProductsDiscount PD中选择count(*),其中PD.cust_ID = 138且PD.pack_detl_ID = 1)然后0结束)** – 2011-03-04 07:01:23

+0

它给出了相同的错误。 – Rauf 2011-03-04 08:42:53

回答

4

首先,虽然你的意图很清楚,但目前形式的脚本没有意义,这是为什么。

要检查在select count(*)...子查询行的存在,但事实是,COUNT()总是返回一个值。在没有指定条件的行的情况下,它将返回0,但这仍然是子查询返回的行,并且在任何情况下EXISTS都将评估为TRUE

要修复它,只需用select *替换select count(*)即可。

另一件事是错误。 子查询不允许在这种情况下,那就是final。用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;