0

DB1 、 DB2 、 Db3 ...> DB50 を備えた SQL Server 2012 があります

サーバーでデータベースを表示する必要がある場合は、使用します

SELECT * FROM sys.databases   

Savesこのテーブルを持たない 5 つのデータベースを除いて、すべてのデータベースに同じテーブルがあります。

どのデータベースにテーブルがあるかを知る必要がありますSaves-このために使用します

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

Saves見つかった場合、すべてのデータベースからテーブルからデータを取得するにはどうすればよいですか?

私は1つずつ使用し、次のようなデータを保存するのに多くの時間がかかります

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 に答える