在SQL Server中无法将数据导出到Excel



我正在使用以下代码将数据从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

相关内容

  • 没有找到相关文章

最新更新