如何在子查询sql server中传递空值

时间:2013-12-27 06:04:18

标签: sql sql-server

我正在使用两个子查询。如果我传递null或空值,则抛出异常

异常消息

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

我的查询

SELECT A.Product_Name AS [Product Name], A.Product_Id AS [Product Id], B.[DuplicateId]

FROM tb_new_product_Name_id AS A, 
(
SELECT COUNT(Product_id)+1 AS [Duplicate Id]
FROM tb_new_product_Name_id_duplicate
WHERE Product_id= (SELECT  Product_id
                   FROM tb_new_product_Name_id
                   WHERE  Product_Name=@product_name_id 
                 )
 ) AS B
 WHERE  Product_Name LIKE '%'+@product_name_id+'%' OR Product_Id like    '%'+@product_name_id+'%';

我的错误在哪里?

4 个答案:

答案 0 :(得分:2)

通常,子查询应该只返回一条记录,但有时它也可以在与where子句中的IN,NOT IN等运算符一起使用时返回多条记录。查询就像,

SELECT COUNT(Product_id)+1 AS [Duplicate Id]
FROM tb_new_product_Name_id_duplicate
WHERE Product_id IN (SELECT  Product_id
                   FROM tb_new_product_Name_id
                   WHERE  Product_Name=@product_name_id 
                 )

答案 1 :(得分:1)

更改此部分

WHERE Product_id= (SELECT  Product_id
                   FROM tb_new_product_Name_id
                   WHERE  Product_Name=@product_name_id 
                 )

改为使用IN

WHERE Product_id IN (SELECT  Product_id
                   FROM tb_new_product_Name_id
                   WHERE  Product_Name=@product_name_id 
                 )

查看IN (Transact-SQL)

  

确定指定的值是否与子查询中的任何值匹配   或列表。

答案 2 :(得分:1)

SELECT COUNT(Product_id)+1 AS [Duplicate Id]
FROM tb_new_product_Name_id_duplicate
WHERE Product_id= (SELECT  Product_id
                   FROM tb_new_product_Name_id
                   WHERE  Product_Name=@product_name_id 
                 )
 ) AS B

使用 Product_id IN 代替 Product_id =

因为如果你使用

  

Product_id = SELECT Product_id                          FROM tb_new_product_Name_id                          WHERE Product_Name = @ product_name_id

它可能会返回多个值,因此请使用 Product_id IN

所以这是正确的查询

SELECT COUNT(Product_id)+1 AS [Duplicate Id]
FROM tb_new_product_Name_id_duplicate
WHERE Product_id IN (SELECT  Product_id
                   FROM tb_new_product_Name_id
                   WHERE  Product_Name=@product_name_id 
                 )
 ) AS B

答案 3 :(得分:0)

试试这个

WHERE Product_id in (SELECT  Product_id
                   FROM tb_new_product_Name_id
                   WHERE  Product_Name=@product_name_id 
                 )

OR

WHERE Exists (SELECT  1
                   FROM tb_new_product_Name_id
                   WHERE  Product_Name=@product_name_id 
and tb_new_product_Name_id_duplicate.Product_ID = tb_new_product_Name_id.Product_id
                 )

您可以使用依赖查询速度