Tips and Tricks to Growing Your SQL Server Estate from SMB to Enterprise Scale
Thursday, June 28, 2018 - click here to learn more
While looking through the new features and improvements in SQL Server 2012, we found a potentially interesting feature WITH RESULT SETS. This is a very useful feature especially when one needs to display a result set of a stored procedure by changing the names and data types of the returning result set. In this tip we will take a look at an example which uses the new WITH RESULT SETS feature in SQL Server 2012.
There was always a limitation in the previous versions of SQL Server that whenever you wanted to change a Column Name or a Data Type within the result set of a Stored Procedure you ended up making changes to all the references within a Stored Procedure. This limitation has been overcome with the release of WITH RESULT SETS feature in SQL Server 2012.
Let's go through an example which demonstrates using WITH RESULT SETS syntax to change the names and data types of the returning result set.
USE tempdb GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Person]') AND type in (N'U')) DROP TABLE [dbo].[Person] GO CREATE TABLE [dbo].[Person] ( [ID] [INT] NOT NULL, [PersonType] [NCHAR](15) NOT NULL, [FirstName] NVARCHAR(50) NOT NULL, [MiddleName] NVARCHAR(50) NULL, [LastName] NVARCHAR(50) NOT NULL, ) ON [PRIMARY] GO INSERT INTO dbo.Person VALUES (1,'Employee','Shannon','L','Johnston') GO IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[UsingWithResultSetsFeatureOfDenali]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[UsingWithResultSetsFeatureOfDenali] GO CREATE PROCEDURE UsingWithResultSetsFeatureOfDenali AS BEGIN SELECT ID, FirstName + ' ' + MiddleName +' '+ LastName AS Name, PersonType FROM dbo.Person END GO /* Execute Stored Procedure */ EXEC UsingWithResultSetsFeatureOfDenali GO /* Using WITH Result Sets Feature Of Denali (SQL Server 2011) */ EXEC UsingWithResultSetsFeatureOfDenali WITH RESULT SETS ( ( ID INT, ContactPersonName VARCHAR(150), PersonType VARCHAR(15) ) ) GO
In the above example, you can see that using WITH RESULTS SETS feature of SQL Server 2012 we have changed the Column Name and Data Type to meet our needs irrespective of the Column Name and Data Type returned within the result set of the Stored Procedure. The Column Name is changed from "Name" to "ContactPersonName" and also Data Type for "Name" is changed from NVARCHAR to VARCHAR and Data Type for "PersonType" is changed from NCHAR to VARCHAR while displaying the result set. This feature can be very useful when executing a stored procedure in SSIS where you can execute the Stored Procedure with the required columns names and appropriate data types.
The below image shows the output when running the above commands. The first result set doesn't change the names or data types and the second result set we have changed the column names and data types using this new feature.
- Download SQL Server 2012 to work with its new features
Last Update: 2011-04-12
About the author
View all my tips