我有一个我想重用的查询,而不是仅仅为了更改列名而拥有许多不同的副本。
报告(例如)使用相同的查询,但表中有狗或猫,如果有猫,则返回“Nr of Cats”,如果有狗,则返回“Nr of Dogs”作为标题返回的表。
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
如果您确实希望 SQL Server 使用可变列名传回结果,则需要为此使用动态 SQL。
举例来说,考虑以下内容:
使用 tempdb 避免对现有对象造成任何令人讨厌的意外:
创建一个表来保存示例数据。由于我们使用的是动态 SQL,因此我们不能为此使用表变量。
使用动态 T-SQL 创建存储过程:
根据传入的值,运行存储的 proc 返回不同的结果集
@DogsOrCats
回报:
回报: