[英]stored procedure issue using fields from the #temp table
我有一個存儲過程,基本上可以做到這一點:
Create table #temp(
field1 int,
field2 int,
total int,
total2 int,
total3 int
)
insert into #temp
(
field1,
field2,
)
Select x.field1, y.field2 from tblA x left join tblB y on x.clientid = y.clientid
這很好用,這非常簡化。
現在我正在做的是更新Total,Total2和Total3的值,如下所示:
update #temp set Total = field1 + field2 <-- works
total2 = field1 + field2 + 300 <-- works
total3 = total2 * 100.0 <-- no value
因此,在上面的update語句中,如果我使用已插入表中的字段,他們會讓我進行UPDATE,但是,由於我更新了表中的total2,因此無法在total3中使用它? 知道為什么嗎?
運行更新時,總計列為NULL
。
所以total3
這樣做: NULL * 100.0
填充total2
,您可以分別更新total3
:
update #temp
set total = field1 + field2,
total2 = field1 + field2 + 300
update #temp
set total3 = total2 * 100.0
或者,您可以用填充它的邏輯替換total2
:
update #temp
set total = field1 + field2,
total2 = field1 + field2 + 300,
total3 = (field1 + field2 + 300) * 100.0
這是您的update
:
update #temp
set Total = field1 + field2 <-- works
total2 = field1 + field2 + 300 <-- works
total3 = total2 * 100.0 <-- no value
您僅為field1
和field2
設置了值,因此其他值均為空。 您需要了解set
子句不是按順序“一次全部”執行的。 =
左側的列引用是“新”記錄; 右邊的列引用是“舊”記錄。 因此,您可以通過重復表達式來解決問題。
解決問題的另一種方法是使用子查詢,CTE或apply
:
update #temp
set Total = v.new_total,
total2 = v2.new_total2 <-- works
total3 = v2.total2 * 100.0 <-- no value
from #temp t cross apply
(values (field1 + field2) ) v(new_total),
(values (new_total + 300) ) v2(new_total2)
可以嘗試以下方法:
update #temp set Total = field1 + field2
total2 = field1 + field2 + 300
total3 = (field1 + field2 + 300) * 100.0
您遇到的問題是因為在嘗試訪問它的同時設置了total2變量。 為了使更新正常工作,您必須使用與更新total2相同的邏輯來更新total3,或者必須為total3創建單獨的更新。
這就是我要做的:
update #temp set Total = field1 + field2 <-- works
total2 = field1 + field2 + 300 <-- works
total3 = (field1 + field2 + 300) * 100.0 <-- should get value
請注意,我將用於total2的加法邏輯放在用於計算total3的括號中。 這是因為total2變量在語句完成執行之前不保留任何值。
另一種方法是將更新分為兩個獨立的語句,例如:
update #temp set Total = field1 + field2 <-- works
total2 = field1 + field2 + 300 <-- works
接着
update #temp set total3 = (field1 + field2 + 300) * 100.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.