0

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

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

任何帮助表示赞赏!

4

2 回答 2

2

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

最简单的方法是使用临时表来累积每个存储过程调用的结果。您可以使用“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 的结果输出将是来自两个存储过程调用的组合的单个结果集。

我希望这有帮助。

于 2013-05-20T16:39:52.700 回答
0

我将使用临时表的建议与此博客文章中的示例结合起来,该示例使用 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
于 2018-03-23T14:48:47.893 回答