SSIS SQL 任务在使用 IF EXISTS 时无法分配参数值

SSIS SQL Task Unable to assign Parameter Value when using IF EXISTS

我正在使用 VS 2012 和 SQL 服务器/SSIS。

我最初有一个 SQL 任务来检查 table:

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

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

当没有重复项时,我收到此消息:

Single Row result set is specified, but no rows were returned

所以,为了解决这个问题,我现在使用 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;

但是,现在我得到错误:

No value given for one or more required parameters.

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

注入参数值

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

如果有重复,您当前的查询将 return 多行,每个重复 (XMLFileID, NINumber) 对。如果您只想 return 一个值来指示 table 中是否有任何重复项,您可以使用 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]

Demo on dbfiddle