我正在尝试我认为相对容易的事情。我使用SQL任务在表中查找文件名。如果存在,则执行某些操作,否则,什么也不做。
这是我在SSIS中的设置:
“表中文件存在”中的我的SQL语句如下,并且ResultSet为“单行”:
SELECT ISNULL(id,0) as id FROM PORG_Files WHERE filename = ?
我的约束是:
当我运行它时,表中还没有文件,因此它应该不返回任何内容。我尝试过ISNULL
和COALESCE
来设置值。我收到以下错误:
错误:表中文件存在,错误0xC002F309,执行SQL任务:向变量“ id”赋值时发生错误:“指定了单行结果集,但未返回任何行。”
不确定如何解决此问题。 ISNULL
和COALESCE
是在SO和MSDN上找到的建议
答案 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
,则不存在任何行。