对于单个列,我知道可以用AS更改列名,但是如何批量更改P.*这样的多个列呢?

解决方案 »

  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')
      

  2.   

    谢谢rivery(river),但是这不是我想要的呀!
    我最终要得到的是返回的数据集,而不紧紧是列名。
    只是由于由多个表联合查询,为避免多个表中的列名字冲突,这样在我的程序中没法用ADO得到指定的列数据,所以想在不同的表的列前家个前缀。
    就好比:
    select U.name as UserName from ....
    这样,只是我现在采用的是U.*和P.*形式,没法用as更改列名,所以不知道怎么办?请大家帮助,谢谢!
      

  3.   

    用动态语句吧
    试试下面这个
    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'
      

  4.   

    --最后再执行
    exec (@sqlstr)
      

  5.   

    谢谢“ReViSion(和尚)”老大!
    你的方法是可以的。但是有个问题,这个查询我是放在一个存储过程中的,用于WEB应用中。这个查询存储过程在页面中需要经常调用到的一个存储过程。如果采用动态SQL,那么效率是不是就会降低很多呀!
    所以不得已的情况下,我不感采用动态SQL!
    请给予指点!