gpt4 book ai didi

sql-server-2005 - 如何使用临时表变量(例如@temp)来保存 sp_msforeachdb 的结果

转载 作者:行者123 更新时间:2023-12-03 01:20:36 27 4
gpt4 key购买 nike

我基本上试图使用 sp_msforeachdb 找出 SQL SERVER 中存在的所有数据库的所有表。

如果我写 exec sp_msforeachdb 'select "?"AS DatabaseNames,* 来自 [?].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。

谢谢

最佳答案

1) 是的,您只需为列使用正确的名称(object_id,而不是 ObjectID):

Declare @DBINFO Table(DbName NVARCHAR(255),ObjectID NVARCHAR(255)) 
INSERT INTO @DBINFO
exec sp_msforeachdb 'select "?" AS DatabaseNames,object_id from [?].sys.tables'
SELECT * FROM @DBINFO

2) 否

关于sql-server-2005 - 如何使用临时表变量(例如@temp)来保存 sp_msforeachdb 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3192089/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com