SQL 服务器删除双引号

SQL Server Remove double quotes

SQL 服务器 2008 R2

我正在从 SQL 服务器创建一个 XML 文件,其中一列导致我出现问题,因为 " 在 varchar 中。

XML导出后是这样的,

<variantValue name="marketingInfo" value="random text.&#x0D;&#x0A;&#x0D;&#x0A; random text.&#x0D;&#x0A;&#x0D;&#x0A;"random text""/>

这当然会破坏 xml 文件。

原来我把 " 误认为是 ”(U+201D 右双引号),这就是替换不起作用的原因。但它仍然作为常规 " 导出到 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

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

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