Bom dia pessoas,
Mais uma novidade do SQL Server 2011 é uso de RESULT SETS para o comando EXECUTE / EXEC, mas para o que serve isso? Basicamente, este recurso ajuda a “tipificar” (ou “tipar”) as consultas resultantes do EXECUTE / EXEC (ex.: Consultas dinâmicas e stored procedures).
Para o primeiro exemplo, sem muita complexidade, informamos os nomes e tipos das colunas de um resultado do comando EXEC:
DECLARE @CONSULTA VARCHAR(MAX) SET @CONSULTA = 'SELECT object_id, name FROM master.sys.tables' EXEC (@CONSULTA) WITH RESULT SETS ( ( Codigo INT, Nome VARCHAR(250) ) )

Uma alternativa é utilizar tipos ou tabelas para “tipificar” de forma mais prática estes resultados:
CREATE TABLE TABELA_MODELO ( Codigo INT, Nome VARCHAR(250) ) CREATE TYPE TIPO_MODELO AS TABLE ( Codigo INT, Nome VARCHAR(250) ) GO DECLARE @CONSULTA VARCHAR(MAX) SET @CONSULTA = 'SELECT object_id, name FROM master.sys.tables' EXEC (@CONSULTA) WITH RESULT SETS ( AS OBJECT dbo.TABELA_MODELO ) EXEC (@CONSULTA) WITH RESULT SETS ( AS TYPE dbo.TIPO_MODELO )
Assim como é possível “tipificar” um dos resultados do comando EXEC, também é abranger todos os resultados que venham a aparecer:
EXEC sp_help 'sp_help' WITH RESULT SETS ( ( Nome VARCHAR(250), [Owner] VARCHAR(250), Tipo VARCHAR(250), Data DATETIME ), ( Parametro VARCHAR(250), Tipo VARCHAR(250), Tamanho INT, Precisao INT, Escala INT, Posicao INT, [Collation] VARCHAR(250) ) )

4 Respostas para “SQL Server 2012 “Denali” CTP 1 – RESULT SETS – Parte 1”