【发布时间】:2020-07-29 16:12:21
【问题描述】:
我正在使用 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 中,我无法再通过 ? 注入参数值
这是为什么?我该如何解决这个问题?
【问题讨论】:
-
您的查询中有 2 个
?,因此 SSIS 会看到 2 个参数。将参数的值分配给变量并使用它,或者将参数传递两次。但是为什么在第一个查询中有HAVING子句呢?为什么不检查查询之外的值(在 SSIS 中)并在值大于 1 时执行您需要执行的操作? -
如果你把它作为答案,@Larnu 我会支持它
标签: sql-server tsql group-by ssis sql-server-2012