【问题标题】:How to make grid results show "<" rather than "&lt;"?如何使网格结果显示“<”而不是“<”?
【发布时间】:2011-01-25 20:17:14
【问题描述】:

这段代码:

SomeField + ' <' + cast(count(AnotherField) as varchar(6)) + '>'

在网格视图中生成以下结果:

Blah &lt;Blah2&gt;

如何确保 HTML 实体显示为它们的等效字符?我很惊讶我无法在 Google 上找到答案。

谢谢。

这是一个更大的 sn-p:

select
   stuff((
      select
         ', ' + SomeField + ' <' + cast(count(AnotherField) as varchar(6)) + '>'
      from
         SomeTable as SomeAbbrev
      where
         SomeField = SomeOutsideField
      group by
         SomeField
      order by
         SomeField asc
      for xml path('')
   ),1,1,'') SomeFields
from
   blablabla
inner join
   blablabla
left join
   blablabla
left join
   blablabla
order by
   SomeDateField asc

【问题讨论】:

  • 结果需要进行字符编码和非转义。
  • 这是在 SSMS 网格视图中查看结果吗?我无法复制这个问题。
  • 正确。它在一个位于 stuff() 内的 select 语句中。我似乎无法绕过小于或大于以 HTML 实体形式打印。
  • 东西()?您的示例中没有 Stuff,因此我认为我们缺少查询的一些相关部分。剩下的可以发吗?
  • 抱歉,现在包含更大的 sn-p。

标签: sql-server ssms html-entities


【解决方案1】:

您可以查看使用的技术here,或者一起绕过 XML 技术并尝试类似下面的示例可能更简单。

此示例将所有表及其列作为逗号分隔的字符串返回。

create function dbo.ColumnString(@table_id int)
returns nvarchar(max)
as
begin
    declare @x nvarchar(max)

    select @x = coalesce(@x+',','') + c.name
        from sys.columns c
        where c.object_id = @table_id
        order by c.name

    return @x
end
go

select t.name, dbo.ColumnString(t.object_id)
    from sys.tables t
    where t.type = 'U'
    order by t.name

drop function dbo.ColumnString

【讨论】:

  • 效果很好!有什么方法可以将其包含在相关子查询中?这将是理想的,因为该列表基于另一个外部查询中的值。
  • @MattB:您可以将此逻辑封装在 UDF 中,并将 UDF 作为外部查询的一部分调用。
  • @MattB:我编辑了我的示例以展示如何创建/使用 UDF。
【解决方案2】:

不是一个完美的解决方案,但我工作......

REPLACE(REPLACE(MyTable.MyColumn, '&lt;', '<'),'&gt;', '>') AS MyColumn

使用 UDF 替换 html 代码列表可能是更“干净”的解决方案。

【讨论】:

  • SomeField + REPLACE('<', '<', '
  • 我在使用 FOR XML 语句时遇到了这个问题。你能发布整个查询吗?
  • 查询现在包含在初始帖子中。
  • 就像我告诉你的那样,查询中的 FOR XML PATH 语句正在对字符进行编码。您可以使用上述答案中的解决方案,或者尝试使用 COALESCE 避免 FOR XML 语句。
  • 谢谢。听起来我需要找到一种解决方法,其中包括输出逗号分隔列表项的能力,同时仍然保持 完好无损。我得看看能否找到一种方法将 COALESCE 包含在另一个 select 语句中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
相关资源
最近更新 更多