SQL Server删除双引号

时间:2015-03-27 11:08:00

标签: sql-server xml character-encoding

SQL Server 2008 R2

我正在从SQL Server创建一个XML文件,而且由于"一列导致我出现问题。在varchar里面。

导出后,XML看起来像这样,

<variantValue name="marketingInfo" value="random text.&#x0D;&#x0A;&#x0D;&#x0A; random text.&#x0D;&#x0A;&#x0D;&#x0A;"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

1 个答案:

答案 0 :(得分:0)

我不确定它的答案是否完整,但是如下所示改变BCP命令解决了我的问题。

set @cmd = 'bcp "exec db..procedure 1,2,3,4" queryout "c:\export\'+ @filename +'" -T -w