1

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

CanEdit | CanView | CanAdd | CanDelete

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

  • 如果用户对每一列都有 true... E,V,A,D

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

我怎样才能做到这一点?

4

1 回答 1

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 中执行此操作会将您的数据层和表示层耦合在一起,这是另一种反模式。

于 2012-05-10T14:51:36.907 回答