将数据导出到Excel在SQL Server中不起作用

时间:2015-03-18 09:05:15

标签: sql-server excel export-to-excel openrowset aceoledb

我使用下面的代码将数据从SQL Server导出到Excel:

update openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=E:\..\.xlsx;', 
    'select Column1,Column2,Column3 FROM [Sheet1$]')
set Column1=null,Column2=null,Column3=null

insert into OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=E:\..\.xlsx;', 'SELECT * FROM [Sheet1$]') 
    select Column1,Column2,Column3 from table_Name

我在64位Excel 2010中使用64位操作系统。

此代码在32位系统上使用32位Excel正常工作但在64位系统中第一次正常工作正常,但下次我要将所有记录设置为空白并插入新记录并更新是工作但在更新后,当我执行插入命令时,SQL Server显示了受影响的行数,但是当我打开文件时,它完全是空白的。

1 个答案:

答案 0 :(得分:0)

只有SQL Server Integration Services(SSIS)支持导出到Microsoft Excel工作簿。

  

Microsoft Excel用户可以像使用本机Excel文件一样打开CSV文件   因此,导出到CSV文件适用于大多数情况,您可以使用简单的命令行实用程序而不是SQL Server Integration Services(SSIS)。

导出到Excel工作簿或CSV文件的缺点是用户每次都会收到一个新文件并丢失其更改。


请注意以下提示:

  • 日期时间字段应遵循上面显示的格式,以便Microsoft Excel无法使用。
  • 应引用文本字段,否则列数据逗号分隔字段。
  • CSV文件的前两个字符不应包含大写“L”或“D”其他Microsoft Excel在用户打开文件时显示“SYLK:文件格式无效”错误消息。

最终命令是:

'-S . => Defines the localhost server
'-d AzureDemo => Defines the database (ex. AzureDemo)
'-E => Defines the trusted connection. Instead you can use user credentials: -U Username -P Password
'-s, => Defines the comma as a column separator. Use -s; for semicolon.
'-W  => Removes trailing spaces.
'-Q "SELECT * FROM ..." => Defines a command line query and exit
'ExcelTest.csv => Outputs the result to file ExcelTest.csv
'findstr /V /C:"-" /B => removes strings like "--,-----,--------,--------".
'
sqlcmd -S . -d AzureDemo -E -s, -W -i ExcelTest.sql | findstr /V /C:"-" /B > ExcelTest.csv
  

注意:
  sqlcmd实用程序无法将NULL更改为empty值!   使用SQL查询中的ISNULL函数将NULL更改为''   或者在命令文本末尾添加| replace-null.exe > ExcelTest.csv