摘要:SQLSERVER 2012 可编程性新特性_WITH RESULT SETS
SQL2012新增了可以使用 WITH RESULT SETS 选项定义结果集的元数据的功能。我们知道,存储过程中返回结果集是很常见的,但如果想要控制部分返回结果集的字段名和数据类型将会是很困难的。SQL Server 2012引入一个新特性WITH RESULT SETS,可以重新定义存储过程中返回结果的字段名和数据类型。这会使得向拥有特定字段名和数据类型的临时表的结果集中插入记录将变得非常容易,并且不需要依赖存储过程返回了哪些内容。
使用 EXECUTE 传递单个参数
uspGetEmployeeManagers 存储过程需要一个参数 (@EmployeeID)。 以下示例执行 uspGetEmployeeManagers 存储过程,以 Employee ID 6 作为参数值。
USE AdventureWorks2012; GO EXEC dbo.uspGetEmployeeManagers 6; GO
然后我们使用WITH RESULT SETS定义结果集:
1.使用 EXECUTE 重新定义单个结果集
前面的一些示例执行 EXEC dbo.uspGetEmployeeManagers 6;,将返回 7 个列。 以下示例说明如何使用 WITH RESULT SET 语法更改返回的结果集的名称和数据类型。
USE AdventureWorks2012; GO EXEC uspGetEmployeeManagers 16 WITH RESULT SETS ( ([Reporting Level] int NOT NULL, [ID of Employee] int NOT NULL, [Employee First Name] nvarchar(50) NOT NULL, [Employee Last Name] nvarchar(50) NOT NULL, [Employee ID of Manager] nvarchar(max) NOT NULL, [Manager First Name] nvarchar(50) NOT NULL, [Manager Last Name] nvarchar(50) NOT NULL ) );
2.使用 EXECUTE 重新定义两个结果集
在执行返回多个结果集的语句时,请定义每个预期结果集。 以下示例在 AdventureWorks2012 中创建一个返回两个结果集的过程。 然后使用 WITH RESULT SETS 子句执行该过程并指定两个结果集定义。
USE AdventureWorks2012; GO --Create the procedure CREATE PROC Production.ProductList @ProdName nvarchar(50) AS -- First result set SELECT ProductID, Name, ListPrice FROM Production.Product WHERE Name LIKE @ProdName; -- Second result set SELECT Name, COUNT(S.ProductID) AS NumberOfOrders FROM Production.Product AS P JOIN Sales.SalesOrderDetail AS S ON P.ProductID = S.ProductID WHERE Name LIKE @ProdName GROUP BY Name; GO -- Execute the procedure EXEC Production.ProductList '%tire%' WITH RESULT SETS ( (ProductID int, -- first result set definition starts here Name Name, ListPrice money) , -- comma separates result set definitions (Name Name, -- second result set definition starts here NumberOfOrders int) );
更详细的资料,请参阅官方解释:http://msdn.microsoft.com/zh-cn/library/ms188332(v=SQL.110).aspx