读书人

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

发布时间: 2013-10-11 14:52:39 作者: rapoo

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


哇塞,顶
[解决办法]
方法有,不过处理过来的就更麻烦了。
[解决办法]
用动态SQL语句倒是可以实现
[解决办法]


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


[解决办法]
因为在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中任何一种数据库,能实现这种写法的。

[解决办法]
本质上来说,只有在sql server端,能把select a.* as a_*,也就是自动进行转换,才能支持

读书人网 >SQL Server

热点推荐