在SSMS中将存储过程结果集导出到Excel

时间:2018-03-26 11:17:52

标签: sql-server excel stored-procedures ssms

我正在使用SSMS并尝试将存储过程的结果导出到新的excel文件。 SP接受一个int参数,但我找不到在查询中调用它的方法。

最新努力 -

EXEC sp_makewebtask 
    @outputfile = 'C:\Users\me\Documents\testing.xls', 
    @query = **ExportAsExcel** N'@id' = 123
    @colheaders =1, 
    @FixedFont=0,@lastupdated=0,@resultstitle='Testing details'

运行存储过程会产生两个数据表,我需要在不同的表上。你们任何人都可以建议一个更好的方法来解决这个问题吗?它甚至不需要自动化,我只需要获得正确的数据。 sp名称以粗体显示。

感谢您的时间,

ħ

3 个答案:

答案 0 :(得分:4)

我建议你将存储过程分成两个程序,每个程序分别返回一个单独的表,并将那些程序调用到不同的工作表中。

有多种方法可以使用SQL

将数据返回到Excel

以下是我code by Joshua的最爱(您不必使用参数):

  1. 在Excel的功能区上选择“数据”选项卡,然后在“获取外部数据”组中选择“从其他来源”下拉列表。然后选择“来自Microsoft Query”

  2. 在“选择数据源”弹出框中,选择您的SQL Server,然后单击“确定”。

  3. 如有必要,请关闭“添加表格”弹出窗口。

  4. 点击“SQL”按钮,或选择查看> SQL打开SQL弹出编辑器。

  5. 输入以下语法:{CALL myDatabaseName.dbo.myStoredProc(?,?,?)}

    例如:{CALL northwind.dbo.spGetMaxCost(?,?,?)}

    请务必在call语句周围添加波浪形大括号。每个问号(?)表示一个参数。如果存储过程需要更多或更少的参数,请根据需要添加或减少问号。

  6. 点击“确定”按钮。应弹出一个问题框,说“无法以图形方式表示SQL查询,还是继续?”,只需点击“确定”按钮即可。

  7. 现在将要求您提供上面包含的每个问号的示例参数。输入要查询的数据的有效参数值。

  8. 输入完最后一个参数后,您应该在Microsoft Query中获得一些结果。如果它们看起来不错,请关闭Microsoft Query。

  9. 您现在应该查看“导入数据”弹出窗口。单击“属性”按钮,将弹出“连接属性”弹出窗口。

  10. 选择“定义”选项卡,然后选择“参数”按钮。您现在应该看到一个“参数”弹出窗口,您可以在其中将参数连接到特定单元格。

  11. 选择从以下单元格中获取值,然后通过单击带箭头的小方框连接到Excel中将保存参数的相应单元格。

  12. 如果您希望每次更改包含参数的单元格时刷新数据,请选中“单元格值更改时自动刷新”框,

  13. 继续上述其他参数。完成后,单击“确定”,返回“连接属性”弹出窗口。单击OK返回Import Data弹出窗口,然后再次单击OK。

  14. 您现在应该直接从存储过程中获取一些数据。

  15. 您最终会获得类似于以下的连接信息:

    连接信息

    并且,如果您使用工作表中的参数,那么,对于我的示例,

    Adding parameters from sheet

答案 1 :(得分:1)

这不是您问题的直接答案,但可以使用Excel VBA和连接连接到SQL Server存储过程,为其提供参数,并在Excel中返回SP结果集。查看我的文章Microsoft Excel & SQL Server: Self service BI to give users the data they want,了解图像和代码密集型演示。

祝你好运。

在一个SO问题中有太多细节要发布,否则我会在这里做。

答案 2 :(得分:0)

我开发了SSMSBoost加载项,并且我们已经实现了该功能,该功能使您可以通过3种方式(包括在一个文件中创建多个工作表)将数据导出到excel:

  1. 您可以通过一次操作将所有结果网格导出为“打开工作表”文件格式,Excel可以正确理解并正确显示该文件格式。此文件格式支持多个工作表。 要使用它:右键单击SSMS中的数据网格,然后选择“脚本网格数据”->“ Excel”模板->“所有网格”->“ ToDisk”。 您还可以查看生成的文件以了解其工作原理。如果要独立于加载项,则可以在存储过程中实现相同的功能。下面还提供了示例XML。 (2个具有1个列名和1个值的Excel工作表)

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
	<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
	</ExcelWorkbook>
	<Styles>
		<Style ss:ID="sH1"><Font ss:Bold="1"/></Style>
		<Style ss:ID="sD1"><NumberFormat ss:Format="General Date"/></Style>
		<Style ss:ID="sD2"><NumberFormat ss:Format="Short Date"/></Style>
		<Style ss:ID="sD3"><NumberFormat ss:Format="Short Time"/></Style>
	</Styles>
	<Worksheet ss:Name="GridResults1">
		<Table>
			<Row>
				<Cell ss:StyleID="sH1"><Data ss:Type="String">ColumnNameA</Data></Cell>
			</Row>
			<Row>
				<Cell><Data ss:Type="Number">1</Data></Cell>
			</Row>

		</Table>
	</Worksheet>

	<Worksheet ss:Name="GridResults2">
		<Table>
			<Row>
				<Cell ss:StyleID="sH1"><Data ss:Type="String">ColumnNameB</Data></Cell>
			</Row>
			<Row>
				<Cell><Data ss:Type="Number">1</Data></Cell>
			</Row>

		</Table>
	</Worksheet>

</Workbook>

  1. 您还可以从SSMS Grid复制粘贴数据,右键单击它,然后选择“将选择复制为XML电子表格(Excel)”。数据将被复制,并保留数据类型。

  2. 更高级的选项是我们的“后执行处理程序”功能。它使您可以在查询执行完成后运行某些操作。您也可以在此处安排自动导出到excel文件。

希望有或没有SSMSBoost都会有帮助;)

相关问题