Eu tenho uma consulta que gostaria de reutilizar, em vez de ter muitas cópias diferentes dela apenas para alterar o nome da coluna.
O relatório (por exemplo ) usa a mesma consulta, mas há cães ou gatos na tabela e, se houver gatos, ele retornará 'Nr of Cats' e, se houver cães, 'Nr of Dogs' como título para a tabela retornada.
declare @Animals table (
AnimalType varchar(20), Name varchar(20)
)
insert into @Animals(Type, Name) values('Cat', 'Garfield')
declare @AnimalType varchar(20)
set @AnimalType = (Select Top 1 AnimalType from @Animals )
select
Case when @AnimalType = 'Cat'
then 'Nr of Cats'
else 'Nr of Dogs' = count(*) from @Animals
Você precisará usar o SQL dinâmico para isso, se realmente quiser que o SQL Server transmita os resultados com nomes de colunas variáveis.
A título de exemplo, considere o seguinte:
Use tempdb para evitar surpresas desagradáveis em objetos existentes:
Crie uma tabela para armazenar os dados de amostra. Como estamos usando SQL dinâmico, não podemos usar uma variável de tabela para isso.
Crie um procedimento armazenado usando T-SQL dinâmico:
A execução do procedimento armazenado retorna vários conjuntos de resultados, com base no valor passado como
@DogsOrCats
Retorna:
Retorna: