我正在使用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名称以粗体显示。
感谢您的时间,
ħ
答案 0 :(得分:4)
我建议你将存储过程分成两个程序,每个程序分别返回一个单独的表,并将那些程序调用到不同的工作表中。
有多种方法可以使用SQL
将数据返回到Excel以下是我code by Joshua的最爱(您不必使用参数):
在Excel的功能区上选择“数据”选项卡,然后在“获取外部数据”组中选择“从其他来源”下拉列表。然后选择“来自Microsoft Query”
在“选择数据源”弹出框中,选择您的SQL Server,然后单击“确定”。
如有必要,请关闭“添加表格”弹出窗口。
点击“SQL”按钮,或选择查看> SQL打开SQL弹出编辑器。
输入以下语法:{CALL myDatabaseName.dbo.myStoredProc(?,?,?)}
例如:{CALL northwind.dbo.spGetMaxCost(?,?,?)}
请务必在call语句周围添加波浪形大括号。每个问号(?)表示一个参数。如果存储过程需要更多或更少的参数,请根据需要添加或减少问号。
点击“确定”按钮。应弹出一个问题框,说“无法以图形方式表示SQL查询,还是继续?”,只需点击“确定”按钮即可。
现在将要求您提供上面包含的每个问号的示例参数。输入要查询的数据的有效参数值。
输入完最后一个参数后,您应该在Microsoft Query中获得一些结果。如果它们看起来不错,请关闭Microsoft Query。
您现在应该查看“导入数据”弹出窗口。单击“属性”按钮,将弹出“连接属性”弹出窗口。
选择“定义”选项卡,然后选择“参数”按钮。您现在应该看到一个“参数”弹出窗口,您可以在其中将参数连接到特定单元格。
选择从以下单元格中获取值,然后通过单击带箭头的小方框连接到Excel中将保存参数的相应单元格。
如果您希望每次更改包含参数的单元格时刷新数据,请选中“单元格值更改时自动刷新”框,
继续上述其他参数。完成后,单击“确定”,返回“连接属性”弹出窗口。单击OK返回Import Data弹出窗口,然后再次单击OK。
您现在应该直接从存储过程中获取一些数据。
您最终会获得类似于以下的连接信息:
连接信息
并且,如果您使用工作表中的参数,那么,对于我的示例,
答案 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:
<?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>
您还可以从SSMS Grid复制粘贴数据,右键单击它,然后选择“将选择复制为XML电子表格(Excel)”。数据将被复制,并保留数据类型。
更高级的选项是我们的“后执行处理程序”功能。它使您可以在查询执行完成后运行某些操作。您也可以在此处安排自动导出到excel文件。
希望有或没有SSMSBoost都会有帮助;)