统一改换查询出的字段。。这是不是想多了?

潮起潮落 2013-10-09 05:30:55
能不能这样

select
A.* as A_*
from QAQuestion Q inner join QAAnswer A ON A.QuestionID = Q.ID

简单地说,不想一个个地去给每个字段as别名
我如上去写只是打个比方。。实际运行不了的,想得到的查询结果是
A_字段1,A_字段2,A_字段3,A_字段4

有没有办法呢?
...全文
63 点赞 收藏 10
写回复
10 条回复
MrYangkang 2013年10月10日

--参考上面的,然后变了下
--查询时,动态给各列取别名

if object_id('alias') is not null
drop table alias
go
create table alias
(
	id int primary key,
	name nvarchar(20)
)
go
insert into alias
select 1,'张三' union all
select 2,'李四' union all
select 3,'王五' union all
select 4,'赵六'
go
select * from alias
select name from syscolumns where id = object_id('alias')
go
--动态生成语句为: 
declare @sql varchar(max)
set @sql = ''

--第一种方法
--select @sql = @sql + ',' + c.name + ' as A_' + c.name   
--from sys.tables t 
--inner join sys.columns c         
--on t.object_id = c.object_id   where t.name = 'alias'
--order by c.column_id   
--第二种方法
select @sql = @sql + ',' + name + ' as A_' + name  from syscolumns where id = object_id('alias')

set @sql = 'select ' +             STUFF(@sql,1,1,'') +            ' from alias A'   

print @sql 
exec( @sql )
回复 点赞
潮起潮落 2013年10月10日
谢谢各位的热心帮助哦! 刚才一直在忙,也没顾得上结贴。
回复 点赞
潮起潮落 2013年10月10日
引用 6 楼 yupeigu 的回复:
因为在sql server端,你写的sql语句是各式各样的,要想实现你的A.* as A_*,实际上就是要改写查询,改为: select a.字段1 as a_字段1, a.字段2 as a_字段2, a.字段3 as a_字段3, from a 下面是通过动态语句来实现的:

--先建个表
select * into wc_table
from sys.objects

/*
要实现
select a.* as a_*
from wc_table
的效果
*/


--动态生成语句为:
declare @sql varchar(max);

set @sql = '';

select @sql = @sql + ',' + c.name + ' as A_' + c.name   
from sys.tables t
inner join sys.columns c
        on t.object_id = c.object_id

where t.name = 'wc_table'
order by c.column_id


set @sql = 'select ' + 
           STUFF(@sql,1,1,'') +
           ' from wc_table A'


select @sql           
/*
我把结果格式化了一下就是这样:

SELECT name                AS A_name, 
       object_id           AS A_object_id, 
       principal_id        AS A_principal_id, 
       schema_id           AS A_schema_id, 
       parent_object_id    AS A_parent_object_id, 
       type                AS A_type, 
       type_desc           AS A_type_desc, 
       create_date         AS A_create_date, 
       modify_date         AS A_modify_date, 
       is_ms_shipped       AS A_is_ms_shipped, 
       is_published        AS A_is_published, 
       is_schema_published AS A_is_schema_published 
FROM   wc_table A  
*/

exec(@sql) 
这样只是中看不中用的实现方式,比原来的更加麻烦,本质上要想实现你的那种方式,必须在SQL Server端的sql要支持这种简单的写法,但到现在位置我没有看到数据库,包括sql server,oracle,mysql,db2中任何一种数据库,能实现这种写法的。
这样不行的话,估计只有看哪些比较贴心的ORM在程序中实现了。。
回复 点赞
阳泉酒家小当家 2013年10月09日
本质上来说,只有在sql server端,能把select a.* as a_*,也就是自动进行转换,才能支持
回复 点赞
阳泉酒家小当家 2013年10月09日
因为在sql server端,你写的sql语句是各式各样的,要想实现你的A.* as A_*,实际上就是要改写查询,改为: select a.字段1 as a_字段1, a.字段2 as a_字段2, a.字段3 as a_字段3, from a 下面是通过动态语句来实现的:

--先建个表
select * into wc_table
from sys.objects

/*
要实现
select a.* as a_*
from wc_table
的效果
*/


--动态生成语句为:
declare @sql varchar(max);

set @sql = '';

select @sql = @sql + ',' + c.name + ' as A_' + c.name   
from sys.tables t
inner join sys.columns c
        on t.object_id = c.object_id

where t.name = 'wc_table'
order by c.column_id


set @sql = 'select ' + 
           STUFF(@sql,1,1,'') +
           ' from wc_table A'


select @sql           
/*
我把结果格式化了一下就是这样:

SELECT name                AS A_name, 
       object_id           AS A_object_id, 
       principal_id        AS A_principal_id, 
       schema_id           AS A_schema_id, 
       parent_object_id    AS A_parent_object_id, 
       type                AS A_type, 
       type_desc           AS A_type_desc, 
       create_date         AS A_create_date, 
       modify_date         AS A_modify_date, 
       is_ms_shipped       AS A_is_ms_shipped, 
       is_published        AS A_is_published, 
       is_schema_published AS A_is_schema_published 
FROM   wc_table A  
*/

exec(@sql) 
这样只是中看不中用的实现方式,比原来的更加麻烦,本质上要想实现你的那种方式,必须在SQL Server端的sql要支持这种简单的写法,但到现在位置我没有看到数据库,包括sql server,oracle,mysql,db2中任何一种数据库,能实现这种写法的。
回复 点赞
Landa_Jimmy 2013年10月09日


select 
   'A_'+A.*
from QAQuestion Q inner join QAAnswer A ON A.QuestionID = Q.ID

回复 点赞
lzw_0736 2013年10月09日
用动态SQL语句倒是可以实现
回复 点赞
Landa_Jimmy 2013年10月09日
方法有,不过处理过来的就更麻烦了。
回复 点赞
MrYangkang 2013年10月09日
哇塞,顶
回复 点赞
唐诗三百首 2013年10月09日
建议用视图,定义时写一次[字段] as [别名]即可..
回复 点赞
发动态
发帖子
应用实例
创建于2007-09-28

1.1w+

社区成员

6.8w+

社区内容

MS-SQL Server 应用实例
社区公告
暂无公告