2016-06-27 4 views
2

テーブル内の2つの列を更新する場合、そのうちの1つは別の更新された列の計算に依存します。計算はやや複雑なので、毎回それを繰り返す必要はなく、私はちょうど新たに更新された値を使いたいと思っています。1つの列が別の更新された列に依存する更新ステートメント

CREATE TABLE test (
    A int, 
    B int, 
    C int, 
    D int 
) 

INSERT INTO test VALUES (0, 0, 5, 10) 

UPDATE test 
    SET 
     B = C*D * 100, 
     A = B/100 

だから私の質問は、これはただ一つのクエリで列Aの値として50を取得することも可能ですか? 別のオプションは、永続的な計算カラムを使用することですが、別の計算カラムに依存している場合は機能しますか?

+0

私はちょうどあなたが(バックエンドがあると仮定して)最初のバックエンドでの値を計算することができればお互い – dwonisch

+0

に依存して計算列を持つことは不可能であることが判明、同時に挿入/更新されている他の値に基づいて値を挿入/更新することはできないので、これは実際には最善の方法です。もう1つのオプションは、最初に値を挿入し、ちょうど挿入されたデータ(および計算に必要なデータのチャンク)のPKを取得し、すぐにそれを更新するようなことです。 – user2366842

答えて

2

これは、オールアットワンスオペレーションという概念が原因で、「SQL Serverでは、同じ論理フェーズで表示される操作は同じで評価されます時間.. "..オペレーション以下

はあなたが

insert into table1 
(t1,t1+100,t1+200)-- sql wont use new t1 incremented value 

samesを期待している収量結果を習慣も同様に更新して

update t1 
    set t1=t1*100 
     t2=t1 --sql wont use t1 updated value(*100) 
行きます

参考文献:
TSQL Querying by Itzik Ben-Gan

関連する問題