我正在使用以下代码将数据从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位操作系统和64位Excel 2010。
这段代码在使用32位Excel的32位系统上运行良好,但在64位系统中,第一次运行正常,但下次我想将所有记录设置为空,插入新记录,更新正在运行,但在更新后,当我执行插入命令时,SQL Server显示有多少行受到影响,但当我打开文件时,它完全为空。
只有SQL Server Integration Services(SSIS)支持导出到Microsoft Excel工作簿。
Microsoft Excel用户可以以与本机Excel文件相同的方式打开
CSV
文件
因此,导出到CSV
文件适用于大多数情况,您可以使用简单的命令行实用程序,而不是SQL Server Integration Services(SSIS)。
导出到Excel工作簿或CSV文件的缺点是,用户每次都会收到一个新文件并丢失其更改。
- 如果要使用SSIS到xlsx文件,请单击此链接
- 如果您更改使用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
。