SQL中表變量的不足
SQL中的表變量并不是***無缺的,與SQL中的臨時(shí)表相比,它存在著一些缺陷,具體如下:
在表變量上不能創(chuàng)建非聚集索引(為 PRIMARY 或 UNIQUE 約束創(chuàng)建的系統(tǒng)索引除外)。與具有非聚集索引的臨時(shí)表相比,這可能會(huì)影響查詢性能。
表變量不像臨時(shí)表那樣可以維護(hù)統(tǒng)計(jì)信息。在表變量上,不能通過自動(dòng)創(chuàng)建或使用 CREATE STATISTICS 語句來創(chuàng)建統(tǒng)計(jì)信息。因此,在大表上進(jìn)行復(fù)雜查詢時(shí),缺少統(tǒng)計(jì)信息可能會(huì)妨礙優(yōu)化器確定查詢的***計(jì)劃,從而影響該查詢的性能。
在初始 DECLARE 語句后不能更改表定義。
表變量不能在 INSERT EXEC (但經(jīng)本人測(cè)試在sql2005可以使用insert vartable exec)或 SELECT INTO 語句中使用。
表類型聲明中的檢查約束、默認(rèn)值以及計(jì)算所得的列不能調(diào)用用戶定義的函數(shù)。
如果表變量是在 EXEC 語句或 sp_executesql 存儲(chǔ)過程外創(chuàng)建的,則不能使用 EXEC 語句或 sp_executesql 存儲(chǔ)過程來運(yùn)行引用該表變量的動(dòng)態(tài) SQL Server 查詢。由于表變量只能在它們的本地作用域中引用,因此 EXEC 語句和 sp_executesql 存儲(chǔ)過程將在表變量的作用域之外。但是,您可以在 EXEC 語句或 sp_executesql 存儲(chǔ)過程內(nèi)創(chuàng)建表變量并執(zhí)行所有處理,因?yàn)檫@樣表變量本地作用域?qū)⑽挥?EXEC 語句或 sp_executesql 存儲(chǔ)過程中。
【編輯推薦】