使用场景:用来拼接大量的字符串(经过测试,用for xml path性能非常好)。
问题:字符串中有英文大于、小于、等于等等对于xml来讲的特殊字符,所以用for xml path拼接后给自动转义了,除了Replace之外有没有其他比较靠谱的方式来处理(尤其是性能上),因为用Replace的话,还不如直接用传统的字符串拼接呢。
测试代码
DECLARE @T AS TABLE ( TestText VARCHAR(50) ) ; DECLARE @ExecuteSql NVARCHAR(MAX) ; INSERT @T ( TestText ) SELECT 'Hello > World;' UNION ALL SELECT 'World < Hello;' ; SELECT @ExecuteSql = ( SELECT '' + TestText FROM @T FOR XML PATH('') ) ; SELECT @ExecuteSql ;
用replace函数,还是比较方便,
但是如果在字符串中存在比较多的 特殊字符的时候,那么用replace就很不方便了,还不如你说的字符串拼接来的灵活
另外,之前在论坛,看到有人说,在数据量较大的时候,使用for xml path来拼接大量字符串,可能会有性能问题。
DECLARE @T AS TABLE ( TestText VARCHAR(50) ) INSERT @T( TestText) SELECT 'Hello > World;'UNION ALLSELECT 'World < Hello;' ;WITH cte AS(SELECT ROW_NUMBER()OVER(ORDER BY GETDATE()) rn,* FROM @T) SELECT a.TestText+b.TestText as TestText FROM cte a,cte b where a.rn<b.rn --结果 TestText ---------------------------------------------------------------------------------------------------- Hello > World;World < Hello; (1 行受影响)