SSIS执行SQL任务错误“指定了单行结果集,但未返回任何行。”

时间:2019-05-10 22:57:08

标签: sql-server ssis etl

我正在尝试我认为相对容易的事情。我使用SQL任务在表中查找文件名。如果存在,则执行某些操作,否则,什么也不做。

这是我在SSIS中的设置:

SSIS Setup

“表中文件存在”中的我的SQL语句如下,并且ResultSet为“单行”:

SELECT ISNULL(id,0) as id FROM PORG_Files WHERE filename = ?

enter image description here

enter image description here

我的约束是:

enter image description here

当我运行它时,表中还没有文件,因此它应该不返回任何内容。我尝试过ISNULLCOALESCE来设置值。我收到以下错误:

  

错误:表中文件存在,错误0xC002F309,执行SQL任务:向变量“ id”赋值时发生错误:“指定了单行结果集,但未返回任何行。”

不确定如何解决此问题。 ISNULLCOALESCE是在SO和MSDN上找到的建议

2 个答案:

答案 0 :(得分:2)

尝试将您的SQL语句更改为COUNT,然后您的比较表达式将显示为@ID > 0。因此,如果您有与模式匹配的文件,则计数将大于0;如果没有文件,则计数将返回0。

 SELECT COUNT(id) as id FROM PORG_Files WHERE filename = ?

答案 1 :(得分:1)

如果要检查是否存在行,则应使用Count,如提到的@ jradich1234。

SELECT COUNT(*) as id FROM PORG_Files WHERE filename = ?

如果要检查行是否存在并将id存储在变量中以供以后在包中使用,则首先必须使用TOP 1,因为选择了单行结果集,并且可以使用类似的结果逻辑:

DECLARE @Filename VARCHAR(4000) = ?

IF EXISTS(SELECT 1 FROM PORG_Files WHERE filename = @Filename)
    SELECT TOP 1 id FROM PORG_Files WHERE filename = @Filename
ELSE
    SELECT 0 as id

然后,如果id = 0,则不存在任何行。