【问题标题】:SSIS SQL Task Unable to assign Parameter Value when using IF EXISTS使用 IF EXISTS 时 SSIS SQL 任务无法分配参数值
【发布时间】: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


【解决方案1】:

如果有重复项,您当前的查询将返回多行,每个重复的(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]

Demo on dbfiddle

【讨论】:

  • @Michael 不用担心 - 我很高兴能帮上忙。
猜你喜欢
  • 1970-01-01
  • 2015-01-10
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多