将表转换为逗号分隔的字符串

时间:2012-05-10 14:45:55

标签: sql sql-server-2008

我在表变量中有一行,如下所示:

CanEdit | CanView | CanAdd | CanDelete

所有列都是位字段。我需要将此表转换为逗号分隔的字符串,如下所示:

  • 如果每个列的用户都为true ... E,V,A,D

  • 如果用户只有编辑和添加... E,A

我该怎么做?

1 个答案:

答案 0 :(得分:3)

因为它是一个固定的集合,所以可以直接按如下方式完成。

SUBSTRING(
    CASE WHEN CanEdit   = 1 THEN ',E' ELSE '' END
  + CASE WHEN CanView   = 1 THEN ',V' ELSE '' END
  + CASE WHEN CanAdd    = 1 THEN ',A' ELSE '' END
  + CASE WHEN CanDelete = 1 THEN ',D' ELSE '' END,
  2,
  7
)

尽管如此,推荐这是非常罕见的。

如果要重构数据,这会颠覆数据的原子性,并且在SQL中被认为是一个根本上有问题的反模式。

如果您是在客户端进行演示,那么在SQL中执行此操作会将您的数据层和表示层耦合,这是另一种反模式。