需要自己写得。 可以用一个辅助函数完成。 CREATE FUNCTION [dbo].[dev_fns_GetColStr] (@prefix varchar(20),@tablename varchar(200)) RETURNS varchar(1000) AS BEGIN declare @str varchar(1000) select @str='' select @str=@str+@prefix+[name]+',' from syscolumns where [id]= object_id(@tablename) order by colorder if len(@str)>0 select @str=left(@str,len(@str)-1) return @str END go select dbo.dev_fns_GetColStr('Ex_','tbl_UserProfile')
谢谢rivery(river),但是这不是我想要的呀! 我最终要得到的是返回的数据集,而不紧紧是列名。 只是由于由多个表联合查询,为避免多个表中的列名字冲突,这样在我的程序中没法用ADO得到指定的列数据,所以想在不同的表的列前家个前缀。 就好比: select U.name as UserName from .... 这样,只是我现在采用的是U.*和P.*形式,没法用as更改列名,所以不知道怎么办?请大家帮助,谢谢!
用动态语句吧 试试下面这个 Declare @Sqlstr varchar(8000)Declare @UFieldStr varchar(2000) Declare @U_Head varchar(10)Declare @PFieldStr varchar(2000) Declare @P_Head varchar(10)set @UFieldStr='' set @U_Head='U_' set @PFieldStr='' set @P_Head='P_'Select @UFieldStr=@UFieldStr+'U.'+name+ ' as '+@U_Head+name+',' from syscolumns where id=object_id('tbl_User') Select @PFieldStr=@PFieldStr+'P.'+name+ ' as '+@P_Head+name+',' from syscolumns where id=object_id('tbl_UserProfile')select @Sqlstr=@Ufieldstr+' '+left(@PfieldStr,len(@PfieldStr)-1) select @Sqlstr='Select '+@sqlstr+' FROM tbl_User U LEFT JOIN tbl_UserProfile P ON U.UserID = P.UserID WHERE U.UserID = 1'
可以用一个辅助函数完成。
CREATE FUNCTION [dbo].[dev_fns_GetColStr] (@prefix varchar(20),@tablename varchar(200))
RETURNS varchar(1000) AS
BEGIN
declare @str varchar(1000)
select @str=''
select @str=@str+@prefix+[name]+',' from syscolumns where [id]= object_id(@tablename) order by colorder
if len(@str)>0
select @str=left(@str,len(@str)-1)
return @str
END
go
select dbo.dev_fns_GetColStr('Ex_','tbl_UserProfile')
我最终要得到的是返回的数据集,而不紧紧是列名。
只是由于由多个表联合查询,为避免多个表中的列名字冲突,这样在我的程序中没法用ADO得到指定的列数据,所以想在不同的表的列前家个前缀。
就好比:
select U.name as UserName from ....
这样,只是我现在采用的是U.*和P.*形式,没法用as更改列名,所以不知道怎么办?请大家帮助,谢谢!
试试下面这个
Declare @Sqlstr varchar(8000)Declare @UFieldStr varchar(2000)
Declare @U_Head varchar(10)Declare @PFieldStr varchar(2000)
Declare @P_Head varchar(10)set @UFieldStr=''
set @U_Head='U_'
set @PFieldStr=''
set @P_Head='P_'Select @UFieldStr=@UFieldStr+'U.'+name+ ' as '+@U_Head+name+',' from syscolumns where id=object_id('tbl_User')
Select @PFieldStr=@PFieldStr+'P.'+name+ ' as '+@P_Head+name+',' from syscolumns where id=object_id('tbl_UserProfile')select @Sqlstr=@Ufieldstr+'
'+left(@PfieldStr,len(@PfieldStr)-1)
select @Sqlstr='Select '+@sqlstr+'
FROM
tbl_User U
LEFT JOIN tbl_UserProfile P
ON U.UserID = P.UserID
WHERE
U.UserID = 1'
exec (@sqlstr)
你的方法是可以的。但是有个问题,这个查询我是放在一个存储过程中的,用于WEB应用中。这个查询存储过程在页面中需要经常调用到的一个存储过程。如果采用动态SQL,那么效率是不是就会降低很多呀!
所以不得已的情况下,我不感采用动态SQL!
请给予指点!