【问题标题】:SSIS Execute SQL Task Error "Single Row result set is specified, but no rows were returned."SSIS 执行 SQL 任务错误“指定了单行结果集,但未返回任何行。”
【发布时间】:2019-05-10 22:57:07
【问题描述】:

我正在尝试我认为相对容易的事情。我使用 SQL 任务在表中查找文件名。如果存在,就做点什么,如果不存在,什么也不做。

这是我在 SSIS 中的设置:

'File Exists in Table'中我的SQL语句如下,ResultSet为'Single Row':

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

我的约束是:

当我运行它时,表中还没有文件,所以它应该什么都不返回。我试过ISNULLCOALESCE 来设置一个值。我收到以下错误:

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

不知道如何解决这个问题。 ISNULLCOALESCE 是在 SO 和 MSDN 中找到的建议

【问题讨论】:

    标签: sql-server ssis etl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果你想检查一行是否存在,那么你应该使用 Count as @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 则不存在任何行。

      【讨论】:

        猜你喜欢
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 2016-12-27
        • 1970-01-01
        • 2017-12-17
        • 1970-01-01
        相关资源
        最近更新 更多