特定の列と別の表の列を比較する表があります。列が変更された場合は、最終的に「Notes」フィールドを変更して変更内容を通知する必要があります。複数の列が変更されている可能性があります。一連のIF文を使用してSQL変数を設定する
簡単に言えば、私は変数を宣言し、変更された変数でその変数を更新し、その変数で列を更新したいとします。
アクセスでは、これを非常に簡単に行うことができますが、これをSQLで無駄にするために2日間を費やしました。
Declare @NewUpdate nvarchar(max)
If B.RCustNmbr <> A.RSQ_Custnmbr Set @NewUpdate = 'CustNmbr changed from ' & A.RSQ_Custnmbr & ' to ' & B.RCustNmbr & ', '
If B.RCustName <> A.RSQ_CUSTNAME Set @NewUpdate = **@NewUpdate** & 'CustName changed from ' & A.RSQ_CUSTNAME & ' to ' & B.RCustName & ', '
Update A
Set A.[Notes] = @NewUpdate & " on today's date " & A.[Notes] *(to include notes that might've been there before)*
From [Table1] A Inner Join [Table2] B on A.ID = B.ID
その後、私は次のID用@NewUpdate変数をリセットしたいと思う(そう設定し@NewUpdate = NULL)
は、あなたがこれを取得するために正しい方向に私を指すことができます達成された? If文でAの&のBテーブルをどのように参照すればよいかわかりません。私はいくつかのことを試しました。
Declare @NewUpdate nvarchar(max)
Set @NewUpdate = (Select 'CustName changed from ' + A.RSQ_CustName + ' to ' + B.RCustName + ', '
From [Customer Master List] A INNER JOIN [Customer Master List Changes TEMP] B ON A.ID = B.ID
Where **A.ID = 566** and B.RCustName <> A.RSQ_CustName)
(フォーマットされた上記のクエリ):これは、最も近い
Declare @NewUpdate nvarchar(max)
Set @NewUpdate =
(Select 'CustName changed from ' + A.RSQ_CustName + ' to ' + B.RCustName + ', '
From [Customer Master List] A
INNER JOIN [Customer Master List Changes TEMP] B ON A.ID = B.ID
Where A.ID = 566 and B.RCustName <> A.RSQ_CustName)
しかし、私は1つのIDにそれを制限するために持っているか、私はエラーを取得するサブクエリが返さより1より大きい。サブクエリが、=、などに続く場合は、これは許可されません。これを何千ものレコードに対して行う必要があります。
「条件1 THEN値1 WHEN条件2 THEN値2 ... ELSE値_デフォルトEND1」を見たことがありますか? –
どのようなSQLのフレーバーを使用していますか? Microsoft SQL(TSQL)、Postgres、MySQL、Oracle(PLSQL)? SQLにはCASE文がありますが、SQLにはさまざまなオプションがあります(例えばトリガ) – Paurian
ありがとうございます。 私はCase Whenを見てきましたが、変数を設定することでうまくいくことはありませんでした。私はそれらを他のコードで使っているので、最初にそれらを試しました。 はい、Microsoft SQL(TSQL)を使用しています。 –