2017-04-26 4 views
0
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 

そのコードは正しい形式の正しい.xmlファイルを返しますが、この@cmdを「LIKE」ではなく「=」で使用すると、xmlファイルが壊れて見えます(謎めいた文字のみそれ):奇妙なXMLエクスポートの動作

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

これはどのように可能ですか? SQL文を実行すると、クエリは同じデータを返します...

答えて

1

私はこれを再現できません。それをチェックアウト:

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を作成しませんか?そのため、おそらく問題は
  • あなたは何かが切り捨て
  • generallがをヒントであることを、これは...かなり小さいことかもしれませんされた255のサイズを使用して、コマンドを宣言...私たちが見ることができない領域にある:使用-wの代わりに-cをエクスポートします。 Find details here
+0

-wそれ、ありがとうございました! –