SQL Server 2012 的 T-SQL 新功能–EXECUTE 功能擴充

本文將介紹如何利用 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

 

【執行結果】

image

 

現在您可以在 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

 

 

【執行結果】

image

 

【參考資料】