本文將介紹如何利用 SQL Server 2012 的 EXECUTE 擴充功能來客製化 Stored Procedure 的回傳結果。
當您使用 SQL Server 2012 的 EXECUTE 敘述來執行 Stored Procedure 時,可以不再像之前那樣,只能單向的接受 Stored Procedure 回傳的結果集,您現在可以透過結果集的定義(result sets definition)來設定回傳資料的 METADATA。
下列程式碼用來建立一個 Stored Procedure ,內容為建立一個名為 MyTab 的資料表,另外在建立一個 usp_get_data 的 Stored Procedure 來故意回傳兩個結果集,分別是取前兩筆和後兩筆資料。
1: if exists (select * from sys.objects where type = 'U' and name = 'MyTab')
2: drop table MyTab
3: go
4:
5: create table MyTab
6: (id int,name nvarchar(10))
7: go
8:
9:
10: insert into MyTab
11: select 1,'A' union all
12: select 2,'B' union all
13: select 3,'C' union all
14: select 4,'D'
15:
16: if exists (select * from sys.objects where type ='P' and name = 'usp_get_data')
17: drop proc usp_get_data
18: go
19:
20:
21: create proc usp_get_data
22: as
23: begin
24: select top 2 *
25: from MyTab
26: order by id
27:
28: select top 2 *
29: from MyTab
30: order by id desc
31: end
32: go
在過去我們都是利用下列的程式碼來執行 Stored Procedure,回傳結果集的欄位名稱(id、name)沒辦法客製化成我們所需要的名稱。
1: execute usp_get_data
2: go
【執行結果】
現在您可以在 SQL Server 2012 中利用 EXECUTE 的擴充功能來自訂回傳結果集,例如下列的程式碼,第4-7列用來定義 Stored Procedure 回傳的第一個結果集欄位名稱由 id、name 改為 sn1、desc1;第9-12烈則是定義第二個結果集回傳sn2、desc2的欄位名稱。
1: execute usp_get_data
2: WITH RESULT SETS
3: (
4: (
5: [sn1] int,
6: [desc1] nvarchar(10)
7: )
8: ,
9: (
10: [sn2] int,
11: [desc2] nvarchar(10)
12: )
13: )
14: go
【執行結果】
【參考資料】