我正在编写针对MSSQL 2005 Server的Trans-SQL脚本,该服务器打算查询每个数据库的文件路径。我能够列出系统中存在的数据库。但是,如何根据结果运行单独的查询?
以下是使用命令(SELECT name from sys.databases
)的数据库列表的输出:
name
----
master
tempdb
model
msdb
现在我想取这个数据库名称(例如master,tempdb)并输入另一个查询,即(exec sp_helpdb <database_name>
)。
任何想法?
答案 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中选择名称)数据库