0

我正在使用以下代码将数据从 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 位 Excel 的 32 位系统上运行良好,但在 64 位系统中,它第一次运行正常,但下一次我想将所有记录设置为空白并插入新记录,更新工作正常,但之后当我执行插入命令 SQL Server 时的更新显示有多少行受到影响,但是当我打开文件时它完全是空白的。

4

1 回答 1

0

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

Microsoft Excel 用户可以像打开CSV原生 Excel 文件一样打开文件。
因此导出到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实用程序没有切换NULLempty值!
使用ISNULLSQL 查询中的函数更改NULL''.
| replace-null.exe > ExcelTest.csv在命令文本的末尾添加。

于 2015-04-12T12:33:36.013 回答