sql-server - 使用 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 中,我不能再通过 ?
为什么是这样?我该如何解决这个问题?
解决方案
如果有重复,您当前的查询将返回多行,每个重复(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]
推荐阅读
- bazel - 在哪里可以获得已知存储库的列表,如@bazel_tools、@rules_jvm_external 等?
- javascript - 如何使用js从当前页面接收GET参数
- angular - Rxjs timeout() 对某些未来日期抛出错误
- python - 提高速度或找到更快的 SQL 更新替代方案
- flutter - Flutter:自定义下拉按钮功能不显示所选值
- google-app-engine - App Engine 未在调试器源视图中显示静态文件目录
- prolog - 您如何从逻辑上阐述操作系统死锁的问题?
- android - 无法在谷歌登录上选择不同的帐户
- c# - 重构此代码以更好地利用 CSharpFunctionalExtensions 库
- angular - Angular 8 和 spring boot api,缺少必需的请求正文