我基本上是在尝试使用 sp_msforeachdb 找出 SQL SERVER 中存在的所有数据库的所有表。
如果我写 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
Run Code Online (Sandbox Code Playgroud)
这工作正常。
但是,如果我这样做
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
Run Code Online (Sandbox Code Playgroud)
它不接受
此外,如果我这样做
;With CTE AS
(
exec sp_msforeachdb 'select "?" AS DatabaseNames,* from [?].sys.tables'
)
Select * …Run Code Online (Sandbox Code Playgroud)