我有一个对服务器列表执行简单查询的 SSIS 包。我对一个特定的简单查询有疑问:如果表存在,请获取行数。否则报告“不存在”。
如果我直接连接,SQL 代码可以在 Management Studio 中运行,但是当我使用 ADO NET 数据流任务与 SSIS 连接来执行代码时,我会收到验证错误。在我看来,SSIS 正在检查代码中的所有对象,以查看它们在执行之前是否存在。它甚至在尝试运行之前就失败了。
如果我注释掉“从 Table1 中选择计数(*)”,那么一切正常。
分布式服务器均使用 SQL Server 2008R2 Express Edition。
declare @Result varchar(1000),
@Table1Count int
select @Result = '',
@Table1Count = 0
-- If tables exist, get the counts
IF EXISTS(select 1 from information_schema.Tables where Table_Name = 'Table1')
BEGIN
select @Table1Count = count(*) from Table1
select @Result = 'Table1: ' + convert(varchar(12),@Table1Count)
END
ELSE
select @Result = 'Tables do not exist'
有任何想法吗?
您可以尝试使用执行有问题的语句
sp_executesql
。一个想法 - 为什么不简单地创建一个 SSIS 变量并使用数据流组件中的行计数任务,而不是使用脚本来获取行数?您需要做的就是将 Row Count 任务映射到您创建的变量。然后你可以对变量的值做任何你想做的事情。您可能需要在数据流中使用条件拆分或查找组件来检查表是否存在,然后才能命中行计数,但我会尝试任何一种方式。