我使用下面的代码将数据从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显示了受影响的行数,但是当我打开文件时,它完全是空白的。
答案 0 :(得分:0)
只有SQL Server Integration Services(SSIS)支持导出到Microsoft Excel工作簿。
Microsoft Excel用户可以像使用本机Excel文件一样打开
CSV
文件 因此,导出到CSV
文件适用于大多数情况,您可以使用简单的命令行实用程序而不是SQL Server Integration Services(SSIS)。
导出到Excel工作簿或CSV文件的缺点是用户每次都会收到一个新文件并丢失其更改。
请注意以下提示:
最终命令是:
'-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
。