雖然你可以使用數組一樣使用一個數據表變量,對於它能夠使用的數據類型是有限制的。例如,你不能在一個數據表變量中包含另一個數據表變量。
你可以象申明一個用戶定義的數據表一樣申明一個數據表變量;但是,在你申明了它以後,你就不能再改變數據表的定義了。另外,你必須在申明的時候定義數據表變量的所有屬性。
並不是所有的INSERT命令都能夠在數據表變量上操作。例如,你不能在向數據表變量插入值的時候使用EXEC命令。執行一個存儲過程或者插入值到數據表變量的字符串命令會返回一個錯誤。同樣,不是所有的SELECT 命令都能夠在數據表變量上操作而且你不能使用SELECT INTO 命令來插入數據到一個數據表變量中去。
你不能在數據表變量上使用一些系統過程,比方sp_depends。數據表變量的對象名在運行時生成,並且是一個隨機的名字,它被保存在tempdb數據庫裡。因為大多數的系統功能和系統過程需要對象名或者標識數值,所以要在一個數據表變量上執行系統功能或者過程是困難的。需要復雜的邏輯來獲得對象的名字以及/或者標識數值來運行系統功能和過程。
一個數據表變量的作用域是批處理過程,存儲過程或者函數執行的過程。當批處理過程中GO命令被觸發了,數據表變量也就出離了它的作用域。
下面是在一個存儲過程中使用一個數據表變量的簡單腳本。
CREATE PROCEDURE TestName AS DECLARE @TableId TABLE (table_id INT IDENTITY NOT NULL primary key nonclustered, id INT NOT NULL, name sysname NOT NULL DEFAULT 'UNKNOWN', type char(2) NOT NULL DEFAULT '9', crdate datetime NOT NULL DEFAULT current_timestamp) INSERT @TableId (id, name, type, crdate) SELECT id, 'test_' + name, type, crdate FROM tempdb..sysobjects SELECT * FROM @TableID GO exec TestName GO