Mssql數(shù)據(jù)庫教程之--SQL Server 2008:傳遞表值參數(shù)_Mssql數(shù)據(jù)庫教程
推薦:淺談選擇SQL Server恢復(fù)模型確保正確備份問題 在管理SQL Server時(shí)首先要做的一件事是建立一個(gè)合適的備份計(jì)劃以便將失敗事件中任何數(shù)據(jù)的丟失可能最小化。建立備份計(jì)劃之后當(dāng)然要做些數(shù)據(jù)庫配置,這些配置是建立以確保你可
為什么要傳遞表值參數(shù)?
用戶常常會(huì)碰到許多需要把數(shù)值容器而非單個(gè)數(shù)值放到存儲(chǔ)過程里的情況。對(duì)于大部分的編程語言而言,把容器數(shù)據(jù)結(jié)構(gòu)傳遞到例程里或傳遞出來是很常見而且很必要的功能。TSQL也不例外。
SQL Server 2000通過OPENXML可以實(shí)現(xiàn)這個(gè)功能,用戶可以把數(shù)據(jù)存儲(chǔ)為VARCHAR數(shù)據(jù)類型然后進(jìn)行傳遞。到了SQL Server 2005,隨著 XML數(shù)據(jù)類型以及XQuery的出現(xiàn),這個(gè)功能變得容易一點(diǎn)。但用戶仍然需要對(duì)XML數(shù)據(jù)進(jìn)行組建和粉碎才能夠使用它,因此這個(gè)功能使用起來并不簡(jiǎn)單。SQL Server 2008則能夠把表值數(shù)據(jù)類型傳遞到存儲(chǔ)過程和功能中,從而大大地簡(jiǎn)化了編程的工作,因?yàn)槌绦騿T無需再花心思去組建和解析XML數(shù)據(jù)了。該功能還可以讓客戶方開發(fā)員傳遞客戶方數(shù)據(jù)表格到數(shù)據(jù)庫中。
如何傳遞表格參數(shù)?
以銷售為例,首先建立一個(gè) my SalesHistory表格,里面包含了產(chǎn)品銷售的信息。寫以下腳本就可以在數(shù)據(jù)庫里創(chuàng)建你選擇的表格:
| 以下為引用的內(nèi)容:
IFOBJECT_ID('SalesHistory')>0 |
建立表值參數(shù)第一步是創(chuàng)建確切的表格類型,這一步非常重要,因?yàn)檫@樣你就可以在數(shù)據(jù)庫引擎里定義表格的結(jié)構(gòu),讓你可以在需要的時(shí)候在過程代碼里使用該表格。下面的代碼創(chuàng)建 SalesHistoryTableType 表格類型定義:
| 以下為引用的內(nèi)容:
CREATETYPESalesHistoryTableTypeASTABLE |
如果想要查看系統(tǒng)里其他類型的表格類型定義,你可以執(zhí)行下面這個(gè)查詢命令,查看系統(tǒng)目錄:
SELECT * FROM sys.table_types
我們需要定義用來處理表值參數(shù)的存儲(chǔ)過程。下面這個(gè)程序能夠接受指定SalesHistoryTableType類型的表值參數(shù),并加載到SalesHistory中,表值參數(shù)在Product列中的值為“BigScreen”:
| 以下為引用的內(nèi)容:
CREATEPROCEDUREusp_InsertBigScreenProducts |
傳遞的表格變量還可以用做任何其他表格的查詢數(shù)據(jù)。
傳遞表值參數(shù)功能的局限性
在傳遞表值變量到程序中時(shí)必須使用 READONLY從句。表格變量里的數(shù)據(jù)不能做修改——除了修改你可以把數(shù)據(jù)用于任何其他的操作。另外,你也不能把表格變量用做OUTPUT參數(shù)——只能用做input參數(shù)。
使用自己的新表格變量類型
首先,要聲明一個(gè)變量類型SalesHistoryTableType,不需要再一次定義表格結(jié)構(gòu),因?yàn)樵趧?chuàng)建這個(gè)表格類型的時(shí)候已經(jīng)定義過了。
| 以下為引用的內(nèi)容:
DECLARE@DataTableASSalesHistoryTableType |
只要把數(shù)據(jù)加載到表格變量里,就可以把結(jié)構(gòu)傳遞到存儲(chǔ)過程中。
注意:當(dāng)表格變量作為參數(shù)傳遞后,表格會(huì)在存儲(chǔ)在tempdb系統(tǒng)數(shù)據(jù)庫里,而不是傳遞整個(gè)數(shù)據(jù)集在內(nèi)存里。因?yàn)檫@樣保證高效處理大批量數(shù)據(jù)。所有服務(wù)器方的表格變量參數(shù)傳遞都是通過使用reference調(diào)用tempdb中的表格。
| 以下為引用的內(nèi)容:
EXECUTEusp_InsertBigScreenProducts |
想要查詢程序是否和預(yù)想效果一樣,可以執(zhí)行以下查詢來看記錄是否已經(jīng)插入到 SalesHistory表格中:
| 以下為引用的內(nèi)容:
SELECT * FROM SalesHistory |
總結(jié):
雖然SQL Server 2008的參數(shù)傳遞功能的使用還有一些小小的局限性,比如不能修改參數(shù)中的數(shù)據(jù)和把變量用于output,但是它大大提高了程序性能,它可以減少server往返旅程數(shù)、利用表格限制并擴(kuò)展編程在數(shù)據(jù)庫引擎中的功能。
分享:關(guān)于避免在 PL/SQL 中使用嵌套游標(biāo)查詢考慮下面的 PL/SQL 代碼,這段代碼生成一個(gè) XML 格式的矩陣樣式的報(bào)表: 以下為引用的內(nèi)容: declare l_count intege
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
- 詳解SQL存儲(chǔ)過程
- mssql2005數(shù)據(jù)庫鏡像搭建教程
- SQL SQL Server 2008中的新日期數(shù)據(jù)類型
- SQL Server2008中刪除重復(fù)記錄的方法分享
- SQL 2005 ERROR:3145 解決辦法(備份集中的數(shù)據(jù)庫備份與現(xiàn)有的數(shù)據(jù)庫不同)
- sqlserver附加.mdf權(quán)限問題解決
- 關(guān)于SQL Server數(shù)據(jù)庫維度表和事實(shí)表的概述
- Sql語句密碼驗(yàn)證的安全漏洞
- SQL普通表轉(zhuǎn)分區(qū)表的方法
- 通過JDBC連接DB2數(shù)據(jù)庫技巧
猜你也喜歡看這些
- 解析mysql中:單表distinct、多表group by查詢?nèi)コ貜?fù)記錄
- MySQL筆記之系統(tǒng)信息函數(shù)詳解
- MySQL筆記之連接查詢?cè)斀?/a>
- MySQL筆記之?dāng)?shù)據(jù)備份與還原的使用詳解
- mysql 按照時(shí)間段來獲取數(shù)據(jù)的方法
- 模板無憂:mysql數(shù)據(jù)庫優(yōu)化總結(jié)
- 詳解MYSQL的備份還原(PHP實(shí)現(xiàn))
- MySQL觸發(fā)器學(xué)習(xí)總結(jié)
- mysql 超大數(shù)據(jù)/表管理技巧
- 解決bash: mysql: command not found 的方法
- 相關(guān)鏈接:
復(fù)制本頁鏈接| 搜索Mssql數(shù)據(jù)庫教程之--SQL Server 2008:傳遞表值參數(shù)
- 教程說明:
Mssql數(shù)據(jù)庫教程-Mssql數(shù)據(jù)庫教程之--SQL Server 2008:傳遞表值參數(shù)
。