SQL Server 2008:傳遞表值引數
為什麼要傳遞表值引數?
使用者常常會碰到許多需要把數值容器而非單個數值放到儲存過程裡的情況。對於大部分的程式語言而言,把容器資料結構傳遞到例程裡或傳遞出來是很常見而且很必要的功能。TSQL也不例外。
SQL Server 2000通過OPENXML可以實現這個功能,使用者可以把資料儲存為VARCHAR資料型別然後進行傳遞。到了SQL Server 2005,隨著 XML資料型別以及XQuery的出現,這個功能變得容易一點。但使用者仍然需要對XML資料進行組建和粉碎才能夠使用它,因此這個功能使用起來並不簡單。SQL Server 2008則能夠把表值資料型別傳遞到儲存過程和功能中,從而大大地簡化了程式設計的工作,因為程式設計師無需再花心思去組建和解析XML資料了。該功能還可以讓客戶方開發員傳遞客戶方資料表格到資料庫中。
如何傳遞表格引數?
以銷售為例,首先建立一個 my SalesHistory表格,裡面包含了產品銷售的資訊。寫以下指令碼就可以在資料庫裡建立你選擇的表格:
IF OBJECT_ID('SalesHistory')>0 DROP TABLE SalesHistory; GO CREATE TABLE [dbo].[SalesHistory] ( [SaleID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [Product] [varchar](10) NULL, [SaleDate] [datetime] NULL, [SalePrice] [money] NULL ) GO |
建立表值引數第一步是建立確切的表格型別,這一步非常重要,因為這樣你就可以在資料庫引擎裡定義表格的結構,讓你可以在需要的時候在過程程式碼裡使用該表格。下面的程式碼建立 SalesHistoryTableType 表格型別定義:
CREATE TYPE SalesHistoryTableType AS TABLE ( [Product] [varchar](10) NULL, [SaleDate] [datetime] NULL, [SalePrice] [money] NULL ) GO |
如果想要檢視系統裡其他型別的表格型別定義,你可以執行下面這個查詢命令,檢視系統目錄:
SELECT * FROM sys.table_types
我們需要定義用來處理表值引數的儲存過程。下面這個程式能夠接受指定SalesHistoryTableType型別的表值引數,並載入到SalesHistory中,表值引數在Product列中的值為“BigScreen”:
CREATE PROCEDURE usp_InsertBigScreenProducts ( @TableVariable SalesHistoryTableType READONLY ) AS BEGIN INSERT INTO SalesHistory ( Product, SaleDate, SalePrice ) SELECT Product, SaleDate, SalePrice FROM @TableVariable WHERE Product = 'BigScreen' END GO |
傳遞的表格變數還可以用做任何其他表格的查詢資料。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-557588/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在SQL Server 2008中的SP上使用表型別值引數MHSQLServer型別
- JS的方法引數傳遞(按值傳遞)JS
- JavaScript 獲取 url 傳遞引數值JavaScript
- Python的函式引數傳遞:傳值?引用?Python函式
- SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008SQLServer
- JavaScript獲取url傳遞的引數值JavaScript
- 引數傳遞
- Go語言引數傳遞是傳值?還是傳引用 ?Go
- Python引數傳遞,既不是傳值也不是傳引用Python
- 面試官問:Go 中的引數傳遞是值傳遞還是引用傳遞?面試Go
- SQL SERVER 2008安全配置SQLServer
- ABAP 方法呼叫的引數傳遞裡,透過引用傳遞的方式,能修改原始引數值嗎?
- Mybatis引數傳遞MyBatis
- 深入學習js之——引數按值傳遞#9JS
- go語言引數傳遞到底是傳值還是傳引用Go
- React事件傳遞引數React事件
- 路由元件傳遞引數路由元件
- sql server遞迴SQLServer遞迴
- 引數傳遞方式必須是const引用傳遞
- 引數的定義和引數的傳遞
- Yii2 layout 由 controller 向layout中傳遞引數值Controller
- Shell學習【引數傳遞】
- linux中main引數傳遞LinuxAI
- 利用閉包傳遞引數
- JavaScript函式傳遞引數JavaScript函式
- out,ref,params引數傳遞
- 請求引數的傳遞
- 函式的引數傳遞函式
- t-on-click 傳遞引數
- Sql Server 的引數化查詢SQLServer
- 引數傳值機制
- 值傳遞和引用傳遞
- 函式作為引數傳遞函式
- C++引數的傳遞方式C++
- [Python] 傳遞引數前面的*或**Python
- 引數傳遞機制之JWTJWT
- JAVA基礎之-引數傳遞Java
- 函式引數傳遞及返回函式
- Python怎麼傳遞不定引數Python