表值參數(shù)有兩個(gè)明顯的優(yōu)點(diǎn):
1:不需要為初始的數(shù)據(jù)加鎖。
2:它不會(huì)導(dǎo)致語句重新編譯。
表值參數(shù)的創(chuàng)建和使用包括以下步驟:
(1) 創(chuàng)建表類型
(2) 創(chuàng)建一個(gè)可將表類型作為參數(shù)來接受的存儲(chǔ)過程或函數(shù)
(3) 創(chuàng)建表變量并插入數(shù)據(jù)
(4) 調(diào)用該存儲(chǔ)過程和函數(shù),并將表變量作為參數(shù)傳遞。
下面,我們來一步步分解這個(gè)創(chuàng)建和使用的過程。首先,我們用以下的DDL SQL語句來創(chuàng)建一個(gè)名為“TestDB”的測試數(shù)據(jù)庫:
|
下面,使用以下的DDL SQL語句來創(chuàng)建一個(gè)名為TestLocationTable的表:
|
然后,使用以下的DML SQL語句將數(shù)據(jù)添加到我們上面創(chuàng)建的表中:
|
下面,我們需要?jiǎng)?chuàng)建一個(gè)和TestLocationTable表具有相似表結(jié)構(gòu)的表類型(TABLE TYPE),語句如下所示:
|
接下來,需要?jiǎng)?chuàng)建一個(gè)可以將表類型作為一個(gè)參數(shù)來接受的存儲(chǔ)過程,使用的語句如下:
|
此存儲(chǔ)過程將表變量作為導(dǎo)入值接收,并且只插入TestLocationTable中沒有的數(shù)據(jù)。現(xiàn)在,大家可以嘗試創(chuàng)建一個(gè)表變量,并執(zhí)行上面創(chuàng)建的存儲(chǔ)過程usp_InsertProdLocation,語句如下所示:
|
此時(shí),可以使用以下的TSQL語句從表TestLocationTable查詢所有的數(shù)據(jù):
|
查詢的結(jié)果:
|
從返回的結(jié)果看,存儲(chǔ)過程usp_InsertProdLocation 插入了表變量@TV中和表TestLocationTable所有不匹配的行。
另外,我們還可以將表變量傳遞給一個(gè)函數(shù)。下面創(chuàng)建一個(gè)簡單的函數(shù),語句如下所示:
|
現(xiàn)在,大家可以通過創(chuàng)建一個(gè)表變量并將該變量作為一個(gè)參數(shù)傳遞給已創(chuàng)建的函數(shù)以調(diào)用該函數(shù),該語句如下所示:
|
執(zhí)行的結(jié)果:
|
注釋:上文中的參考腳本已在SQL Server 2008 CTP6版本上進(jìn)行編寫并已經(jīng)測試成功。
新聞熱點(diǎn)
疑難解答
圖片精選