将多个查询结果导出到单个Excel文件

时间:2013-05-20 15:38:18

标签: sql excel ssms export-to-excel

我在SSMS中运行了一个sp,它从50多个具有完全相同结构的数据库中收集信息。我正在提取诸如CustomerName,NumberOfUsers和VersionofCode之类的结果。当我执行该过程时,我得到50多个不同的结果集,所有结果集都选择了相同的列。我想看看是否可以将所有结果导出到1个excel文件,而不是将这些50多次导出并放在一个excel表中。

这可能吗?我不得不认为有一种方法可以做到这一点,因为我的列名称与我查询的每个数据库都匹配。

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

可能有很多方法可以解决这个问题。我将通过尝试将存储过程调用中的许多结果集合并到单个结果集中,然后执行您希望执行的任何输出 - 导出(excel)来解决此问题。

最简单的方法是使用临时表来累积每个存储的proc调用的结果。您可以使用“INSERT #temptable EXEC mystoredproc @ param1”语法来存储存储过程的结果。

这是我掀起的一个小例子:

-- *** Create a sample stored proc that returns one result set ***
CREATE PROC spGetCompanyEmployees @pCompanyID AS INT
AS
BEGIN
    SELECT Company.CompanyName
        , Department.DepartmentName 
        , Employee.EmployeeName
    FROM Company 
        LEFT JOIN Department ON Department.CompanyID = Company.CompanyID
        LEFT JOIN Employee ON Employee.DepartmentID = Department.DepartmentID
    WHERE Company.CompanyID = @pCompanyID
END
GO


-- *** Demonstrate how to call that stored proc multiple times, 
-- *** accumulating the results in a temp table and selecting
-- *** the combined results at the end.

CREATE TABLE #ttbl
(
    CompanyName NVARCHAR(60)
    , DepartmentName NVARCHAR(60)
    , EmployeeName NVARCHAR(60)
)

INSERT  #ttbl
  EXEC spGetCompanyEmployees 1

INSERT  #ttbl
  EXEC spGetCompanyEmployees 2

SELECT * FROM #ttbl

最终SELECT的结果输出将是两个存储过程调用的组合单个结果集。

我希望这会有所帮助。

答案 1 :(得分:0)

我结合使用临时表和this blog post中使用sys.sp_msforeachdb迭代数据库的示例的临时表,结果如下:

Create TABLE #temp
(
    DbName NVARCHAR(50),
    TableName NVARCHAR(50)
)

INSERT #temp

EXEC
    sys.sp_msforeachdb 
    'SELECT ''?'' DatabaseName, Name FROM [?].sys.Tables WHERE Name LIKE ''%sometablename%'''

Select * from #temp