SQL 服务器删除双引号
SQL Server Remove double quotes
SQL 服务器 2008 R2
我正在从 SQL 服务器创建一个 XML 文件,其中一列导致我出现问题,因为 " 在 varchar 中。
XML导出后是这样的,
<variantValue name="marketingInfo" value="random text.

 random text.

"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
SQL 服务器 2008 R2
我正在从 SQL 服务器创建一个 XML 文件,其中一列导致我出现问题,因为 " 在 varchar 中。
XML导出后是这样的,
<variantValue name="marketingInfo" value="random text.

 random text.

"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