2011-09-12 100 views
20

我有一个查询返回一个非常大的数据集。我无法将其复制并粘贴到我通常使用的Excel中。我一直在研究如何直接导出到Excel工作表。我在运行Microsoft Server 2003的服务器上运行SQL SERVER 2008.我尝试使用Microsoft.Jet.OLEDB.4.0数据提供程序和Excel 2007.我将一小段代码拼凑在一起在例子中见过。将SQL查询数据导出到Excel

INSERT INTO OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 
'Data Source=C:\Working\Book1.xlsx;Extended Properties=EXCEL 12.0;HDR=YES') 
SELECT productid, price FROM dbo.product 

但是这不工作,我得到一个错误信息说

“关键字‘SELECT’附近有语法错误”。

有没有人有任何想法如何做到这一点或可能更好的方法?

+0

您可能还需要用'[Sheet1]指定一个表格'我认为 – JNK

+1

您可以用[Sheet1]指定? Ohhhh [狗屎] !!! – JBone

回答

40

我不知道如果这是你在找什么,但你可以将结果导出到Excel这样的:

在结果窗格中,单击左上角单元格以突出显示所有记录,然后右键单击左上角的单元格并单击“将结果另存为”。其中一个导出选项是CSV。

你也许该给一个镜头太:

INSERT INTO OPENROWSET 
    ('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=c:\Test.xls;','SELECT productid, price FROM dbo.product') 

最后,您可以考虑使用SSIS(取代DTS)进行数据导出。这里是一个链接到一个教程:

http://www.accelebrate.com/sql_training/ssis_2008_tutorial.htm

+4

请注意,右键单击/另存为... CSV不会引用包含逗号或换行符的文本字段。因此,如果您的任何数据包含逗号,则最终会生成格式错误的CSV。 – aucuparia

+0

保存结果不输出列标题。 – YDS

11

如果您只需要导出到excel,则可以使用导出数据向导。 右键单击数据库,任务 - >导出数据。

+1

将它放入存储过程并且必须作为页面上的事件运行 – JBone

1

我也有类似的问题,但与一捻 - 当结果集是从一个查询,但在我的处境上面列出的解决方案的工作,我有多个独立的SELECT查询为此我需要将结果导出到Excel。以下仅仅是为了说明,虽然我可以做一个name in子句的例子...

select a,b from Table_A where name = 'x' 
select a,b from Table_A where name = 'y' 
select a,b from Table_A where name = 'z' 

向导已让我从一个查询导出结果到Excel但不能从在这种情况下不同的查询所有结果。

当我研究,我发现我们可以禁用结果到网格并启用结果到文本。因此,请按Ctrl + T,然后执行所有语句。这应该将结果显示为输出窗口中的文本文件。您可以将文本操作为制表符分隔的格式,以便导入到Excel中。

您也可以按Ctrl + Shift + F将结果导出到文件 - 导出为.rpt文件,可以使用文本编辑器打开该文件并对excel导入进行操作。

希望这可以帮助任何其他人有类似的问题。