【问题标题】:SQL 'stuff' and 'FOR XML PATH' generating strange symbolsSQL 'stuff' 和 'FOR XML PATH' 生成奇怪的符号
【发布时间】:2013-05-14 23:38:42
【问题描述】:

我在 SQL Server 中较大的 Select 语句中有以下查询:

 CONVERT(NVARCHAR(2000),stuff((SELECT '; ' + IsNull(D2.SelectedComments,'')
 FROM #StudentDetails D2
 WHERE D2.STUD_PK = A.STUD_PK AND D2.CourseNo = A.CourseNo
AND D2.Section = A.Section
FOR XML PATH('')),1,2,'')) AS SelectedComments,

此列在某些条目(例如This approach is satisfactory .&#x0D)之后生成了一些奇怪的符号。我不明白.&#x0D 来自哪里。我在此之前尝试过SELECT SelectedComments FROM #StudentDetails,但我没有看到.&#x0D。谁能告诉它可能来自哪里?

【问题讨论】:

  • 0D 是回车的十六进制:columbia.edu/kermit/ascii.html
  • 我认为这是换行和回车。当您将 FOR XML PATH() 添加到您的 Select 语句时,某些对 XML 不友好的字符会被编码,包括换行符和回车符。据我所知,SQL 将输出具有正确编码的有效 XML

标签: sql sql-server tsql


【解决方案1】:

如果您修改了对 For Xml Path 的使用,它会为您完成转义,您无需求助于使用 Replace 功能:

,   Stuff(
        (
        Select '; ' + IsNull( D2.SelectedComments, '' )
        From #StudentDetails As D2
        Where D2.Stud_PK = A.Stud_PK
            And D2.CourseNo = A.CourseNo
            And D2.Section = A.Section
        For Xml Path(''), type
        ).value('.', 'nvarchar(max)')
        , 1, 2, '') As SelectedComments

【讨论】:

  • so.. 默认情况下,“For XML”返回一个 XML 数据类型,带有转义的空白字符。有道理,更要明确说明您想要的数据类型。
【解决方案2】:

是回车符。您可以在插入数据之前清理数据,将其删除,或者,如果您想保留格式,请将 TYPE 添加到 SELECT 的末尾:

SELECT * FROM MyData FOR XML PATH(''), TYPE

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多