あなたは基本的に何をしようとしていますか?これはあなたがそれをすることを選んだ理由です。あなたは、セットベースのロジックを理解するのに少しばかばかしいようです。他のポスターから提供されている回答はそれぞれ有効で有効ですが、あなたの目的に最も適した回答ではないかもしれません。この処理は既存のデータセットに対して行われますか?それはデータロードまたは挿入プロセスの一部ですか?リストされた各IDフィールドには、固有の値域があります。あなたの例に基づいて、あなたが本当にがやりたいと思っているものを、更新がブール値であると表示されたら、ID2 = 1
UPDATE table_name SET Bool = 'T'
WHERE Id2 = 1
あなたには、いくつかのデータに基づいてブール値を設定し、ロジックを開発するために欠けているより多くの可能性ルール - 例えば、Id2がId1よりも小さいか等しい場合。 case文はここに動作します:あなたが挿入した値のそれぞれとすべてのバリエーションのためのあなたのWHERE句での書き込みAND/ORルールよりも、大規模データを扱う際に
UPDATE table_name SET Bool = CASE WHEN Id1 > Id2 THEN 'T' ELSE 'F' END
これは、はるかに効率的です。
ロジックを入力/入力して実装する場所ではなく、フィルタとしてWHEREを考えてください。
小さなデータの挿入(テーブルフィールドに手動で値を入力するか、トランザクションによって何らかの種類の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ステートメントの「ハードコーディング」は非効率的で、悪い習慣です。
どのデータベースをお使いですか? –