摘要:在SQL Server 2005或更早的版本中的數據庫中,表變量是不能作為存儲過程的參數的。SQL Server 2008中的T-SQL功能新增了表值參數。利用這個新增特性,我們可以很方便的將一個表作為參數傳給存儲過程,減少了應用程序與SQL Server數據庫服務器之間的交互,提升了程序性能。
在SQL Server 2005或更早的版本中的數據庫中,表變量是不能作為存儲過程的參數的。當多行數據到SQL Server需要發送多行數據到SQL Server ,開發者要么每次發送一列記錄,或想出其他的變通方法,以滿足需求。雖然在.net 2.0中提供了個SQLBulkCopy對象能夠將多個數據行一次性傳送給SQL Server,但是多行數據仍然無法一次性傳給存儲過程。
SQL Server 2008中的T-SQL功能新增了表值參數。利用這個新增特性,我們可以很方便地通過T-SQL語句,或者通過一個應用程序,將一個表作為參數傳給存儲過程。
1、用戶自定義表類型
當第一次看看新的表值參數,我認為使用此功能有點復雜。有幾個步驟。要做的第一件事是定義表型。在Management Studio 2008中的“Programmability”“Type”節點,您可以看到“User-Defined Table Types(用戶自定義表類型)”,如圖1所示 。
點擊右鍵,在彈出菜單中選擇“新用戶定義的表型... ” ,會新建一個模板中的查詢窗口,如圖2所示 。
點擊“Specify Values for Template Parameters(指定值為模板參數)”按鈕,將探出一個對話框,如圖3所示。
在填寫在適當的數值之后,點擊確定按鈕,一個“CREATE TYPE”的聲明取代了范本。這時,你也可以手動增加一些列,或者增加一些限制條件,最后點擊確定按鈕。
以下是最終的代碼:
|
在運行代碼之后,對象的定義就建立好了,你可以在“User-Defined Table Type(用戶自定義表類型”中查看屬性,如圖4所示,但沒法修改它們。如果要修改的類型,你只能將其刪除,然后按照修改后的屬性再次創建它。
2、使用用戶自定義的表類型
如果打算在T-SQL代碼中使用,您還必須創建一個新類型的變量,然后將具體的表的名稱賦值給該變量。一旦賦值后,您可以在其他的T-SQL語句中使用它。因為它是一個變量,在批處理完成后,它也自動失效,結束生命周期。
請注意下面的代碼,MyType是我們之前剛剛創建的數據類型。
|
在變量的有效范圍內,你可以象操作正常的表一樣來操作這個變量,如與另一個表象關聯或者將變量中的記錄填充到另一個表。對于表變量來說,你無法修改表定義。
正如前面提到的,變量不能超出它的有效的范圍。如果T-SQL腳本由多個批處理組成,變量只有在批處理內才能創建并有效使用。