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]
我正在使用 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]