2016-09-11 3 views
0

у меня есть SQL Server 2012 с DB1, DB2, db3 ...> DB50Извлечение данных из одной таблицы во всех базах данных сервера

Если мне нужно просматривать базы данных в сервере я использую

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 

ответ

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 '[email protected]+' 
      Go 
      if OBJECT_ID(''['[email protected]+'].[dbo].[saves]'') is not null 
      begin 
       select * from ['[email protected]+'].[dbo].[saves] 
      end 
      else 
      begin 
       select ''table saves does not exist into database: '[email protected]+''' 
      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 
+0

محمد عبدالغفار الفقى @ ждут ваших отзывов .... –

+0

Большого спасибо, что он работает нормально, но не показывает, что имя базы данных –

+0

Can названия объявления для базы данных, found & Working fine от MSSQL management, но при использовании с веб-страницы сайта я создаю его для запуска команды sql с другой командой, но не с этим кодом –

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
';

`

+0

спасибо, что он работает fine и показать имя базы данных, которому он снова столбился –

+0

Работая отлично от управления MSSQL, но при использовании с страницы веб-сайта я проектирую ее для запуска команды sql с другой командой, но не с этим кодом –

+0

(получить первую строку только из результатов) в веб-исполнении –

Смежные вопросы