-1

INT (SQL サーバー) 型のデータベースに列があります。

この int 値はビット フラグで使用されるため、AND と OR を使用します。

パラメータを sproc に渡す必要があり、そのパラメータは特定のフラグ項目を表します。

私は通常、列挙型を使用して int 表現を sproc に渡しますが、多くの異なるモジュールがそれにアクセスするため、それらすべてが私の列挙型定義を持つことは実用的ではありません (変更された場合、それは頭痛の種になります)ロールアウトします)。

したがって、「文字列」またはマジックナンバーをパラメーター値として使用する必要がある場合は、sproc で次のようにします。

IF(@blah = 'approved')
BEGIN
      // bit banging here
END
4

2 に答える 2

2

文字列と CASE コンストラクトを使用できます。

CREATE PROCEDURE BitBang(@Flag AS VARCHAR(50), @Id AS INT)
AS
BEGIN
  DECLARE @Bit INT

  SET @BIT = CASE @Flag
    WHEN 'approved'   THEN 16
    WHEN 'noapproved' THEN 16
    WHEN 'fooflag'    THEN 8
    WHEN 'nofooflag'  THEN 8
  END

  IF @Bit IS NOT NULL
  BEGIN
    IF LEFT(@Flag, 2) = 'no' 
    BEGIN
      UPDATE TheTable SET BitField = BitField & ~@Bit WHERE Id = @Id
    END
    ELSE
    BEGIN
      UPDATE TheTable SET BitField = BitField | @Bit WHERE Id = @Id
    END
  END
END
于 2008-12-05T16:35:28.543 に答える
0

フラグに古い 0 と 1 を使用しないのはなぜですか? これはすでにビット スイッチとして広く受け入れられており、0 と 1 の意味について混乱やスペルミスはありません。2つ以上のフラグがあり、1つ以上のフラグが同じ最終的な意味を持つと言っている場合を除きます

于 2008-12-05T16:24:51.060 に答える