通过BCP批量导出导出XML

时间:2012-01-10 10:23:19

标签: sql tsql azure

我有一个带有一些varbinary数据的表tblScan。我想将此表导出为XML文件,因此我可以使用BCP Bulk insert在SQL azure中插入它。 ( BTW甚至可以将varbinary数据转换为XML ??

我在做:

DECLARE @String varchar(8000)
SET @String='bcp "SELECT * FROM dbo.tblScan FOR XML RAW, XMLSCHEMA" queryout C:\Users\DAAGEU\Desktop\tblScanOutput.xml -c -T'
EXEC xp_cmdshell @String

但是我收到了输出错误:

Output error

还有其他解决方案吗?

1 个答案:

答案 0 :(得分:4)

实际上VarBinary和XML(在SQL 2008 R2中)存在问题:

  

FOR XML EXPLICIT和RAW模式目前不支持寻址   二进制数据作为SomeComlumn列中的URL。删除列,或使用BINARY BASE64模式,或使用'dbobject / TABLE [@ PK1 =“V1”] / @ COLUMN'语法直接创建URL。

快速搜索显示this post

您是否有特殊原因想要以XML格式导出?我一直在使用默认二进制输出的bcp,并且VarBinary字段没有问题。二进制文件比XML文件小很多。如果您不想在导出和导入之间进行任何操作,我建议您使用二进制文件。

尝试将您的查询更改为:

SET @String='bcp "SELECT * FROM dbo.tblScan FOR XML RAW, BINARY BASE64" queryout C:\Users\DAAGEU\Desktop\tblScanOutput.xml -c -T'

但是,正如日志所示,您当前的问题是登录。您正在使用可信连接,但是当SQL Server引擎生成时,您知道哪个标识正在运行bcp进程吗?它很可能是SQL Server身份,我猜这个身份无法访问数据库/表(最常见的是本地系统或网络服务)。如果您仍想使用SQL查询而不是批处理文件(.bat或.cmd),我建议您使用显式登录凭据(SQL Server身份验证)而不是可信连接。