在下面的例子:如何更新期間訪問變量的新值的子查詢內部
create table #temp (col1 int, col2 int, col3 int)
declare @var int = 10
insert into #temp values(1, 2, 2)
insert into #temp values(2, 4, 4)
insert into #temp values(3, 6, 6)
update T set
@var = 100,
col2 = @var * col2, -- here @var yields 100, cool
col3 = (select @var * col3) -- but here it's value will be 10
from #temp T
select * from #temp
drop table #temp
的col2
的值乘以100,和那些從col3
10,作爲評價。 這是爲什麼發生?
我需要訪問子查詢中變量的較新值。我會用更復雜的代碼來做這件事,實際上在where子句中(如:where @var = 4
)。
其實我爲什麼要使用一個變量的唯一原因是,它的價值是從另一個子查詢(順便說一句漂亮的巨大)的結果。它的值將在更新中多次使用,所以我不想多次重複子查詢。 – 2015-04-02 21:04:34
您可以執行一次子查詢並初始化變量,然後使用第一個變量初始化第二個變量? – gotqn 2015-04-02 21:11:39
子查詢使用正在更新的行的值,所以,nope – 2015-04-02 21:20:58