奇怪 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
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