【问题标题】:how to use sql for xml path('') but retain carriage returns如何将sql用于xml路径('')但保留回车符
【发布时间】:2011-09-01 02:10:03
【问题描述】:

我有以下代码

select
    (
    select cast(Narrative as Varchar(max)) + char(13) 
    from officeclientledger 
    where ptmatter=$matter$ and ptTrans=4 
    for xml path (''), type
    )

提供如下结果:

Cwm Taff NHS 信托医疗记录 ; Dr Purby 医疗记录 ; (不包括空格,为了提问需要插入)

但是,有没有办法提供结果,例如

Cwm Taff NHS 信托医疗记录

Purby 医生的病历

【问题讨论】:

  • 您希望回车在结果网格中呈现,还是在将文本复制并粘贴到 [在此处插入文本编辑器] 时呈现?
  • 我正在使用这段代码直接进入 word 邮件合并(我知道有点 hacky),所以没有复制/粘贴阶段。但说实话,我不太确定

标签: sql xml


【解决方案1】:

使用 SSMS 中的结果到网格功能无法做到这一点。但是,如果您使用 results to text 选项并将 CHAR(13) 替换为 CHAR(10),您将获得所需的结果。

【讨论】:

  • 干杯 @Quickfire55 - 用 CHAR(10) 处理 CHAR(13) 工作 :)
  • 另外,当您将其设置为结果为文本时,不要忘记在工具 -> 选项 -> 查询结果 -> SQL Server -> 结果为文本中扩展Maximum number of characters displayed in each column-配置。至少在 2008R2 中默认设置为 256。
【解决方案2】:

我遇到了同样的问题,我不能使用 Char(10),因为接收系统需要 Char(13)。所以我使用下面的查询来替换结果中的值并且它有效。

SELECT Coloumn = REPLACE(@v_Get_UPC_List, '
', CHAR(13)) 

【讨论】:

    【解决方案3】:

    当我必须使用 SSMS 并且想要查看请求的值等测试时,我使用打印命令。

    IF OBJECT_ID ('tempdb..#doc') IS NOT NULL DROP TABLE #doc;
    declare @doc varchar(max);
    
    create table #doc (DOC varchar(max));
        insert into #doc EXECUTE db.[spDocumentJob] 1
    
    SELECT @doc = STUFF(
        (SELECT  ' ' +  DOC + ' ' + CHAR(13) + CHAR(10) 
            FROM #doc As T2
            ORDER BY DOC
            FOR XML PATH (''), TYPE).value('.','varchar(max)'),1,1,'')
    print @doc
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      相关资源
      最近更新 更多