奇怪 XML- 导出行为

Strange XML-Export behaviour

declare @cmd nvarchar(255) 

SET @cmd = 'bcp "select * from Testdb.dbo.mytable WHERE nr LIKE ''%102065336''' + '" queryout C:\temp\sample.xml -c -t, -S' +  @@servername +  ' -T'

exec xp_cmdshell @cmd

那个代码 return 是一个格式正确的 .xml 文件,但是当我使用这个 @cmd 时,所以用“=”而不是 "LIKE" xml文件看起来损坏了(里面只有神秘的字符):

SET @cmd = 'bcp "select * from Testdb.dbo.mytable WHERE nr = ''102065336''' + '" queryout C:\temp\sample.xml -c -t, -S' +  @@servername +  ' -T'

所以这怎么可能?如果我执行 sql 语句,查询 return 相同的数据...

我无法重现这个。看看:

USE master;
GO
CREATE DATABASE tstDB;
GO
USE tstDB;

CREATE TABLE mytable(nr VARCHAR(100));
GO
INSERT INTO mytable VALUES('11'),('12'),('22');
GO

declare @cmd nvarchar(255); 

SET @cmd = 'bcp "select * from tstDB.dbo.mytable WHERE nr LIKE ''%11'' FOR XML AUTO' + '" queryout C:\temp\sample1.xml -c -t, -S' +  @@servername +  ' -T';

exec xp_cmdshell @cmd;

SET @cmd = 'bcp "select * from tstDB.dbo.mytable WHERE nr = ''11'' FOR XML AUTO' + '" queryout C:\temp\sample2.xml -c -t, -S' +  @@servername +  ' -T';

exec xp_cmdshell @cmd;
GO
USE master;
GO
--careful with real data!
DROP DATABASE tstDB;
GO

一些想法:

  • 您说的是 XML export,但是您显示的代码没有创建任何 XML?所以也许问题出在我们看不到的区域...
  • 您声明的命令大小为 255。这非常小...可能是某些内容被截断了
  • 一般提示:导出 XML 时使用 -w 而不是 -c。查找 details here