如何查询其他查询的结果?

时间:2011-10-07 02:55:46

标签: sql sql-server sql-server-2005 tsql dynamic-sql

我正在编写针对MSSQL 2005 Server的Trans-SQL脚本,该服务器打算查询每个数据库的文件路径。我能够列出系统中存在的数据库。但是,如何根据结果运行单独的查询?

以下是使用命令(SELECT name from sys.databases)的数据库列表的输出:

name
----
master
tempdb
model
msdb

现在我想取这个数据库名称(例如master,tempdb)并输入另一个查询,即(exec sp_helpdb <database_name>)。

任何想法?

4 个答案:

答案 0 :(得分:2)

不直接回答您的问题,但如果您想为每个数据库运行查询,则可以使用sp_msforeachdb

sp_msforeachdb 'EXEC sp_helpdb [?]'

否则,您将需要使用结果来生成SQL。

答案 1 :(得分:0)

您可以基于该查询构建游标,然后遍历结果,将它们填充到SQL变量中,并使用该变量来执行您的sproc。不幸的是,我现在无法给你一个样品,但这就是我接近它的方式。

答案 2 :(得分:0)

一般来说,你的问题的答案是“使用子查询”。

但在这种情况下,您使用的是SQL Server存储过程。所以最好的方法是编写自己的存储过程:

1)调用sp_helpdb(或从master..sysdatabases中选择)

2)迭代结果

以下是一个例子:

http://www.mssqltips.com/sqlservertip/1070/simple-script-to-backup-all-sql-server-databases/

答案 3 :(得分:-1)

如果我理解正确,你可以在这里使用派生表: -

从中选择database.name(您的查询) (从sys.databases中选择名称)数据库