0

我有带有 DB1 、 DB2 、 Db3 ...> DB50 的 SQL Server 2012

如果我需要查看我使用的服务器中的数据库

SELECT * FROM sys.databases   

Saves除五个数据库没有此表外,所有数据库都有相同的表。

我需要知道哪些数据库有表Saves- 为此我使用

sp_msforeachdb "SELECT '?' DatabaseName, Name FROM ?.sys.Tables WHERE Name LIKE '%saves%'"

Saves如果找到,如何从所有数据库的表中检索数据?

我一个一个使用,保存数据需要很多时间

select * from db1.dbo.Saves

并保存数据然后返回搜索

select * from db2.dbo.Saves

并保存数据然后返回搜索

select * from db3.dbo.Saves

我需要一个 SQL 命令,例如:

Select * from Saves in  sys.databases  if found
4

2 回答 2

0

您可以使用以下查询获取结果。

EXEC sp_msforeachdb '
USE [?];
IF EXISTS (SELECT * FROM [?].INFORMATION_SCHEMA.TABLES AS T WHERE T.TABLE_NAME=''Saves'')
BEGIN
DECLARE @QUERY VARCHAR(MAX);
SELECT @QUERY = COALESCE(@QUERY+'';
SELECT ''''?'''' AS DBNAME; SELECT ''''?'''' AS DBNAME,* FROM [''+T.TABLE_CATALOG+''].''+''[''+T.TABLE_SCHEMA+'']''+''.[''+T.TABLE_NAME+'']'',''
SELECT ''''?'''' AS DBNAME;
SELECT ''''?'''' AS DBNAME,* FROM [''+T.TABLE_CATALOG+''].''+''[''+T.TABLE_SCHEMA+'']''+''.[''+T.TABLE_NAME+'']'')
FROM [?].INFORMATION_SCHEMA.TABLES T WHERE T.TABLE_NAME = ''Saves''
EXEC (@QUERY);
END
';

`

于 2016-09-11T18:11:51.297 回答
0

享受 ...

DECLARE @name  VARCHAR(50), -- database name  
        @Query  NVARCHAR(500) -- My Query

DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM MASTER.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  

OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN 
set @Query ='USE  '+@name+' 
            Go 
            if OBJECT_ID(''['+@name+'].[dbo].[saves]'') is not null
            begin
                select * from ['+@name+'].[dbo].[saves]
            end
            else
            begin
                select ''table saves does not exist into database: '+@name+''' 
            end'

/* the next line for resloving error : Incorrect syntax near 'Go'*/
SET @Query = 'EXEC (''' + REPLACE(REPLACE(@Query, '''', ''''''), 'GO', ''');     EXEC(''') + ''');'--Just add this one line.

exec sp_executesql @Query

FETCH NEXT FROM db_cursor INTO @name   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor  
于 2016-09-11T01:19:10.060 回答