首页 > 解决方案 > 使用 IF EXISTS 时 SSIS SQL 任务无法分配参数值

问题描述

我正在使用 VS 2012 和 SQL Server / SSIS。

我最初有一个 SQL 任务来检查表中的重复值:

SELECT COUNT(*) AS DupNI
FROM dbo.mytable
WHERE XMLFileID = ?
GROUP BY XMLFileID, NINumber
HAVING (COUNT(*) > 1);

?是因为我正在插入一个参数值,并且查询的结果被分配给一个变量。如果有重复,它工作正常。

当没有重复时,我收到以下消息:

指定了单行结果集,但未返回任何行

所以,为了解决这个问题,我现在使用 IF EXISTS,如下所示:

IF EXISTS (SELECT COUNT(*) AS DupNI
           FROM dbo.mytable
           WHERE XMLFileID = ?
           GROUP BY XMLFileID, NINumber
           HAVING (COUNT(*) > 1))
    SELECT COUNT(*) AS DupNI
    FROM dbo.mytable
    WHERE XMLFileID = ?
    GROUP BY XMLFileID, NINumber
    HAVING (COUNT(*) > 1)
ELSE
    SELECT 0 AS DupNI;

但是,现在我得到了错误:

没有为一个或多个必需参数指定值。

似乎是因为我将语句包装在 IF EXISTS 中,我不能再通过 ?

为什么是这样?我该如何解决这个问题?

标签: sql-servertsqlgroup-byssissql-server-2012

解决方案


如果有重复,您当前的查询将返回多行,每个重复(XMLFileID, NINumber)对一个。如果您只想返回一个指示表中是否有任何重复项的值,则可以将您的EXISTS子句用作表达式:

SELECT CASE WHEN EXISTS(
  SELECT COUNT(*) AS DupNI
  FROM dbo.mytable
  WHERE XMLFileID = ?
  GROUP BY XMLFileID, NINumber
  HAVING (COUNT(*) > 1)
) THEN 1 ELSE 0 END AS [Duplicates Exist]

dbfiddle 上的演示


推荐阅读