簡體   English   中英

使用#temp表中的字段的存儲過程問題

[英]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

您僅為field1field2設置了值,因此其他值均為空。 您需要了解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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM