获取具有名为' foo'的视图的所有数据库的列表在他们中

时间:2014-08-21 14:28:25

标签: sql sql-server ssis sql-server-2012 ssis-2012

我有一些服务器,其中包含大量数据库。 一些数据库有一个名为vw_mydata的视图。

我想要做的是创建一个包含名为vw_mydata的视图的所有数据库的列表,然后执行该视图并将其存储在一个表中,该表随后包含来自所有vw_mydata的数据。

我知道我可以使用

找到包含该视图的所有数据库
sp_msforeachdb 'select "?" AS dbName from [?].sys.views where name like ''vw_mydata'''

然后我拥有与数据库一样多的记录集。我如何使用它来遍历数据库?

我更喜欢的是一个简洁的数据库名列表,然后我可以将其存储在结果集中。然后它会非常简单。

我已经考虑过在TSQL上面运行并将结果存储在一个表中,但是我想将它保存在一个SSIS包中,并且没有所有类型的表/程序。我可以在SSIS中的执行SQL任务中使用#table吗?

2 个答案:

答案 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