我有一個查詢下面的SQL Server中工作,以選擇一列中的值和另一列中的值之間的差異,但在源表中早兩行。源表有三列(PK bigint,Pv float,現金浮動)。如何從SQL Server光標返回單行集?
當我使用這個查詢時,我得到的是一系列單行行集合,而不是一個大行集合。我可以將這些一個一個地插入臨時表中,然後從中選擇,但這意味着對於大型表而言,我最終會得到一個大的臨時表以及對返回的第一條記錄的長時間延遲。
有沒有什麼方法可以有效地將此查詢的結果作爲單個行集進行後臺處理?
declare @PK bigint
declare @Pv float
declare @Cash float
declare @Cash_minus_1 float
declare @Cash_minus_2 float
set @Cash_minus_1 = 0
set @Cash_minus_2 = 0
declare myCursor cursor fast_forward
for select PK, Pv, Cash from MyTable order by PK
for read only
open myCursor
fetch next from myCursor
into @PK, @Pv, @Cash
while @@FETCH_STATUS = 0
begin
select @PK, @Pv, @Cash, @Cash_minus_2
set @Cash_minus_2 = @Cash_minus_1
set @Cash_minus_1 = @Cash
fetch next from myCursor
into @PK, @Pv, @Cash
end
close myCursor
deallocate myCursor
「之前兩行」 - 由於您的'SELECT'沒有ORDER BY子句,因此可以將其指定爲「來自表格中的其他隨機行」。如果您可以告訴我們哪些列*應該*定義順序,例如「早兩行」實際上是有意義的,那麼我們應該可以幫助 –
另外,您能否說出您正在使用的SQL Server版本? –
@Damien_The_Unbeliever 2008 R2。是的,欣賞行順序沒有在查詢中定義,試圖儘可能簡化示例 - 編輯了示例查詢。 –