【问题标题】:How to query results from another query?如何查询另一个查询的结果?
【发布时间】:2011-12-02 17:09:30
【问题描述】:

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

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

name
----
master
tempdb
model
msdb

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    您可以基于该查询构建一个游标,然后循环遍历结果,将它们填充到 SQL 变量中,然后使用该变量来执行您的存储过程。很遗憾,我现在无法为您提供样品,但我会采用这种方式。

    【讨论】:

    • 是的,我一直在考虑使用循环,但这不像普通脚本
    【解决方案2】:

    不直接回答你的问题,但是如果你想对每个数据库运行一个查询,你可以使用sp_msforeachdb

    sp_msforeachdb 'EXEC sp_helpdb [?]'
    

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

    【讨论】:

    • 你最接近答案了!设法通过您提供的链接找到我的答案。谢谢!
    【解决方案3】:

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

    但在本例中,您使用的是 SQL Server 存储过程。所以最好的方法是编写自己的存储过程:

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

    2) 遍历结果

    这是一个例子:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-08-18
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        • 2021-10-28
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多