SQL Server 2008 R2
我正在从SQL Server创建一个XML文件,而且由于"一列导致我出现问题。在varchar里面。
导出后,XML看起来像这样,
<variantValue name="marketingInfo" value="random text.

 random text.

"random text""/>
当然会破坏xml文件。
事实证明我误解了&#34;对于“(U + 201D RIGHT DOUBLE QUOTATION MARK),这就是为什么更换没有工作的原因。然而它仍然作为常规出口#34;到XML。
在从SQL导出到XML时如何处理文本字段以便转义任何可能破坏XML的字符?
SQL过程看起来像这样,
declare @pricat xml
set @Pricat = (
--Pricat HEAD
select ..some attributes
--Pricat ROWS
,(select ..sone attributes
-- PriceBracket 1 (PRE)
,(select ..some attributes
for xml path ('priceBracket'), type)
-- PriceBracket 2 (Supp)
,(select ..some attributes
for xml path ('priceBracket'), type)
-- VariantValue 01
,(select ..some attributes
for xml path ('variantValue'), type)
-- VariantValue 02
,(select ..some attributes
for xml path ('variantValue'), type)
for xml path ('sprProduct'), type)
from prh
FOR XML PATH ('Pricat')
)
-- Not sure if this is a good way to add verion and encoding tag.
--select '<?xml version="1.0" encoding="ISO-8859-1"?>' + cast(@Pricat as varchar(max)) as xml
select @b24Pricat
XML文件创建如下,
declare @filename varchar(100)
declare @cmd varchar(256)
declare @date datetime
set @date = getdate()
set @filename = cast(datepart(year,@date) as varchar)+cast(LEFT(CONVERT(CHAR(20), @date, 101), 2) as varchar)+cast(datepart(day,@date) as varchar)
set @filename = @filename + '_' + cast(datepart(minute,@date) as varchar )+ cast(datepart(second,@date) as varchar)
set @filename = 'blabla_' + @filename + '.xml'
-- -C 28591
set @cmd = 'bcp "exec db..procedure 1,2,3,4" queryout "c:\export\'+ @filename +'" -T -c -C 28591'
EXEC xp_cmdshell @cmd
答案 0 :(得分:0)
我不确定它的答案是否完整,但是如下所示改变BCP命令解决了我的问题。
set @cmd = 'bcp "exec db..procedure 1,2,3,4" queryout "c:\export\'+ @filename +'" -T -w