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 に答える