SQL中表變量是否必須替代臨時表
在SQL數(shù)據(jù)庫中,必須使用表變量來代替臨時表嗎?答案取決于三個因素:插入到表中的行數(shù)、從中保存查詢的重新編譯的次數(shù)、以及查詢類型及其對性能的指數(shù)和統(tǒng)計信息的依賴性。
在某些情況下,可將一個具有臨時表的存儲過程拆分為多個較小的存儲過程,以便在較小的單元上進行重新編譯。
通常情況下,應(yīng)盡量使用表變量,除非數(shù)據(jù)量非常大并且需要重復(fù)使用表。在這種情況下,可以在臨時表上創(chuàng)建索引以提高查詢性能。但是,各種方案可能互不相同。Microsoft 建議您做一個測試,來驗證表變量對于特定的查詢或存儲過程是否比臨時表更有效。
============================
declare @temp table
(
[id] int IDENTITY(1,1),
[Name] varchar(10)
)
declare @tempId int,@tempName varchar(10)
insert into @temp values('a')
insert into @temp values('b')
insert into @temp values('c')
insert into @temp values('d')
insert into @temp values('e')
--select * from @temp
WHILE EXISTS(select [id] from @temp)
begin
SET ROWCOUNT 1
select @tempId = [id],@tempName=[Name] from @temp
SET ROWCOUNT 0
delete from @temp where [id] = @tempId
print 'Name:----'+@tempName
end
【編輯推薦】