あなたは基本的に何をしようとしていますか?なぜこれがあなたがそれをするために選んだ方法ですか?セットベースのロジックを理解するのに少し曖昧なようです。他のポスターによって提供された各回答は有効であり、機能しますが、目的に最も適しているとは限りません。この処理は既存のデータセットに対して行われますか?それはデータのロードまたは挿入プロセスの一部ですか?リストした各IDフィールドには、独自の範囲の一意の値があります。あなたの例に基づいて、あなたが本当にやりたいのはID2=1のときにbool値を更新することであるように見えます
UPDATE table_name SET Bool = 'T'
WHERE Id2 = 1
たとえば、Id2がId1以下の場合など、何らかのデータルールに基づいてブール値を設定するロジックを開発する必要がある可能性があります。ここでcaseステートメントが機能します。
UPDATE table_name SET Bool = CASE WHEN Id1 > Id2 THEN 'T' ELSE 'F' END
これは、大量のデータセットを処理する場合、挿入する値のバリエーションごとにWHERE句にAND/ORルールを書き込むよりもはるかに効率的です。
WHEREは、if / then型ロジックを実装する場所としてではなく、フィルターとして考えてください。
小さなデータ挿入(テーブルフィールドに手動で値を入力するか、トランザクションごとにある種のWebフォームトランザクションから挿入する)では、適切と思われる値を手動で設定するか、の手続き部分に値を組み込むのがおそらく最も簡単です。システムを作成し、検証ルールをテーブルに適用します。
これを行うストアドプロシージャを作成する場合は、ID値の変数を作成し、それらをデータベースシステムに外部情報を送信するシステムにリンクします。(テーブル構造はすでに作成されていると思います);
CREATE PROCEDURE table_name_insert
@Id1 Int NOT NULL,
@Id2 Int NOT NULL
-- If you want to execute the logic outside of the DB environment
-- (perhaps as part of an SSIS package) then you will want to add this
-- variable and pass it in explicitly.
, @Bool bit NOT NULL
AS
DECLARE @sql nvarchar(4000)
SET @sql = '
INSERT INTO table_name (ID1, ID2, Bool)
SELECT @Id1, @Id2, [Case Logic or Variable Value for Bool]
' EXEC sp_executeSQL @sql
このプロセスはプログラムから呼び出すことができ、配列から生成する可能性のある変数をプログラムに渡します。値を適切な列に直接インポートしてから、挿入後のコードでBoolロジックを実行する方法もあります。すべてのケースを処理するためのWHEREステートメントの「ハードコーディング」は非効率的であり、入り込むのは悪い習慣です。