Я в основном пытаюсь выяснить все таблицы всех баз данных, присутствующих в СЕРВЕРЕ SQL, используя sp_msforeachdb.
Если я напишу exec sp_msforeachdb 'select "?" AS DatabaseNames,* from [?].sys.tables'
Я получу результат хорошо, но для каждой базы данных будет создан отдельный набор записей.
Теперь, если я использую
CREATE TABLE #DBINFO
(
DbName NVARCHAR(255)
,ObjectID NVARCHAR(255)
)
INSERT INTO #DBINFO
exec sp_msforeachdb 'select "?" AS DatabaseNames,ObjectID from [?].sys.tables'
SELECT * FROM #DBINFO
Это отлично работает.
Однако, если я сделаю
Declare @DBINFO Table(DbName NVARCHAR(255),ObjectID NVARCHAR(255))
INSERT INTO @DBINFO
exec sp_msforeachdb 'select "?" AS DatabaseNames,ObjectID from [?].sys.tables'
SELECT * FROM @DBINFO
Не принимает
Более того, если я сделаю
;With CTE AS
(
exec sp_msforeachdb 'select "?" AS DatabaseNames,* from [?].sys.tables'
)
Select * from CTE
, выдает ошибку (В настоящее время я не помню этого).
Вопрос
1) Можно ли сделать то же самое, используя переменную таблицы
2) Можно ли сделать то же самое с помощью CTE?
SQL SERVER 2005.
Спасибо