A partir do SQL Server 2012 é possivel manipular o retorno de stored procedures de uma forma elegante e funcional.
Considere a seguinte procedure:
create procedure usp_testeResultSet as ( select getdate() hoje, getdate()-1 ontem, 123456 sequencia, 'abc' alfa )
Até o 2008 R2 podíamos manipular o retorno de uma procedure através de uma tabela temporária:
create table ##resultSetAntes2012 ( hoje date, ontem date, sequencia bigint null, alfa nvarchar(100) ); go insert into ##resultSetAntes2012 execute usp_testeResultSet;
No entanto quando consideramos o mapeamento entre aplicação e banco de dados esta não é uma abordagem tão prática.
No SQL Server 2012 temos o WITH RESULT SETS que permite alterar a forma como os dados são retornados e com este comando é possivel alterar:
- a identificação de atributos;
- o tipo do dado (datatype) de atributos.
- Não é possivel, porém, omitir/incluir atributos.
Como funciona?
Na prática a nova cláusula é bem intuitiva. Digamos que o desenvolvedor precise aproveitar o retorno de uma procedure já existente (neste exemplo a usp_testeResultSet) porém, necessita que os campos de datas sejam retornados com datatype DATE (ao invés de DATETIME) e que o campo alfa seja retornado no formato unicode.
Observe abaixo a diferença da chamada (e seu retorno) com o WITH RESULT SETS:
execute usp_testeResultSet go execute usp_testeResultSet with result sets ( ( hoje date, ontem date, sequencia bigint null, alfa nvarchar(100) ) )

Conclusão
A cláusula WITH RESULT SETS pode facilitar ainda mais a vida do programador, porém, recomendo o uso com parcimonia. Lembre-se que esta cláusula altera o retorno em tempo de execução. Se a procedure for alterada (com a adição de um novo atributo, por exemplo) a chamada na aplicação que contém o WITH RESULT SETS deve ser alterada, pois do contrário a aplicação “quebrará”. Lembre-se que a nova cláusula não permite a omissão/inclusão de atributos.









