我有一些服务器,其中包含大量数据库。 一些数据库有一个名为vw_mydata的视图。
我想要做的是创建一个包含名为vw_mydata的视图的所有数据库的列表,然后执行该视图并将其存储在一个表中,该表随后包含来自所有vw_mydata的数据。
我知道我可以使用
找到包含该视图的所有数据库sp_msforeachdb 'select "?" AS dbName from [?].sys.views where name like ''vw_mydata'''
然后我拥有与数据库一样多的记录集。我如何使用它来遍历数据库?
我更喜欢的是一个简洁的数据库名列表,然后我可以将其存储在结果集中。然后它会非常简单。
我已经考虑过在TSQL上面运行并将结果存储在一个表中,但是我想将它保存在一个SSIS包中,并且没有所有类型的表/程序。我可以在SSIS中的执行SQL任务中使用#table吗?
答案 0 :(得分:4)
DECLARE @Tsql VARCHAR(MAX)
SET @Tsql = ''
SELECT @Tsql = @Tsql + 'SELECT ''' + d.name + ''' AS dbName FROM [' + d.name + '].sys.views WHERE name LIKE ''vw_mydata'' UNION '
FROM master.sys.databases d
--"trim" the last UNION from the end of the tsql.
SET @Tsql = LEFT(@Tsql, LEN(@Tsql) - 6)
PRINT @Tsql
--Uncomment when ready to proceed
--EXEC (@Tsql)
答案 1 :(得分:2)
要在SSIS中使用临时表,您需要使用全局临时表(##TABLE
)。
在连接的属性上,我很确定您需要将RetainSameConnection
设置为TRUE
。
在创建临时表后的SQL任务中,您需要将DelayValidation
设置为TRUE
。