1

我有几台服务器,里面有一堆数据库。一些数据库有一个名为 vw_mydata 的视图。

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

我知道我可以使用找到包含该视图的所有数据库

sp_msforeachdb 'select "?" AS dbName from [?].sys.views where name like ''vw_mydata'''

但是我有和数据库一样多的记录集。我如何使用它来遍历数据库?

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

我曾考虑在 TSQL 之上运行并将结果存储在一个表中,但我想将它全部保存在一个 SSIS 包中,而不是到处乱放所有类型的表/过程。我可以在 SSIS 的执行 SQL 任务中使用 #table 吗?

4

2 回答 2

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)
于 2014-08-21T14:37:03.507 回答
2

要在 SSIS 中使用临时表,您需要使用全局临时表 ( ##TABLE)。

在连接的属性上,我很确定您需要设置RetainSameConnectionTRUE.

在创建临时表后的 SQL 任务中,您需要设置DelayValidationTRUE.

于 2014-08-21T14:37:34.593 回答