象使用數(shù)組一樣使用一個數(shù)據(jù)表變量
2024-07-21 02:38:52
供稿:網(wǎng)友
雖然你可以象數(shù)組一樣使用一個數(shù)據(jù)表變量,對于它能夠使用的數(shù)據(jù)類型是有限制的。例如,你不能在一個數(shù)據(jù)表變量中包含另一個數(shù)據(jù)表變量。
你可以象申明一個用戶定義的數(shù)據(jù)表一樣申明一個數(shù)據(jù)表變量;但是,在你申明了它以后,你就不能再改變數(shù)據(jù)表的定義了。另外,你必須在申明的時候定義數(shù)據(jù)表變量的所有屬性。
并不是所有的INSERT命令都能夠在數(shù)據(jù)表變量上操作。例如,你不能在向數(shù)據(jù)表變量插入值的時候使用EXEC命令。執(zhí)行一個存儲過程或者插入值到數(shù)據(jù)表變量的字符串命令會返回一個錯誤。同樣,不是所有的SELECT 命令都能夠在數(shù)據(jù)表變量上操作而且你不能使用SELECT INTO 命令來插入數(shù)據(jù)到一個數(shù)據(jù)表變量中去。
你不能在數(shù)據(jù)表變量上使用一些系統(tǒng)過程,比方sp_depends。數(shù)據(jù)表變量的對象名在運行時生成,并且是一個隨機的名字,它被保存在tempdb數(shù)據(jù)庫里。因為大多數(shù)的系統(tǒng)功能和系統(tǒng)過程需要對象名或者標(biāo)識數(shù)值,所以要在一個數(shù)據(jù)表變量上執(zhí)行系統(tǒng)功能或者過程是困難的。需要復(fù)雜的邏輯來獲得對象的名字以及/或者標(biāo)識數(shù)值來運行系統(tǒng)功能和過程。
一個數(shù)據(jù)表變量的作用域是批處理過程,存儲過程或者函數(shù)執(zhí)行的過程。當(dāng)批處理過程中GO命令被觸發(fā)了,數(shù)據(jù)表變量也就出離了它的作用域。
下面是在一個存儲過程中使用一個數(shù)據(jù)表變量的簡單腳本。
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