如何查询所有数据库中的表中的列

时间:2013-10-29 17:05:12

标签: sql sql-server tsql

我希望在表中存在的每个数据库中查询表中的列。到目前为止,我有以下内容,但我不确定从哪里开始:

DECLARE @tblName VARCHAR(5000) = 'myTable'

SELECT name
FROM sys.databases
WHERE CASE
    WHEN state_desc = 'ONLINE'
        THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].['+@tblName+']','U')
    END IS NOT NULL

到目前为止,我可以使用我正在查找的表返回所有数据库但是我希望SQL服务器上每个数据库中指定表中特定列的所有列数据。感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

答案 1 :(得分:0)

sp_MSForEachDb可能是错误的,跳过数据库和其他奇怪的东西。有一个替代程序here具有非常相似的用法。

另一种方式是

DECLARE @tbl SYSNAME = 'sys.objects'
DECLARE @sql NVARCHAR(MAX)

SET @sql = CAST((SELECT 'IF EXISTS(SELECT 1 FROM ' + QUOTENAME(name) + '.' + @tbl + ')' + 
                        ' SELECT TOP 1 ''' + QUOTENAME(name) + ''' db, * FROM ' + QUOTENAME(name) + '.' + @tbl AS 'data()'
                FROM sys.databases
                WHERE database_id > 4
                FOR XML PATH('')) AS NVARCHAR(MAX))


EXEC (@sql)

答案 2 :(得分:0)

你可以使用这样的东西

Create #tempTable(col datatype, col1 datatyep.....)
;EXEC sp_msforeachdb 'USE [?]
                    IF DB_NAME() IN(SELECT name
                                FROM sys.databases
                                WHERE CASE
                                    WHEN state_desc = ''ONLINE''
                                        THEN OBJECT_ID(QUOTENAME(name) + ''.[dbo].[myTable]'',''U'')
                                    END IS NOT NULL)
                        INSERT INTO #tempTable
                        SELECT mycolumn from my table
                        '
SELECT * from #tempTable