我有两张表 里面都有相同的列名 如a表里面有 编号 。。, B表里面也有编号 。连接之后 现在不想显示B表里面的编号,而其他的列都要    不想这个样子 select a.*,b.列名 from a join b where a.编号=b.编号   因为b表里面有100多个字段 不可能总是b.字段  就想做成除了B表里面的编号字段不要 其余都要    怎么办? 

解决方案 »

  1.   

    先动态生成字段,然后copy也可以。
      

  2.   

    DECLARE @STR VARCHAR(8000)
    SET @STR=''SELECT @STR=@STR+','+NAME
    FROM SYSCOLUMNS
    WHERE ID=OBJECT_ID('tableName') AND NAME<>'编号' 
    ORDER BY COLIDSELECT STUFF(@STR,1,1,'')
      

  3.   

    通过dbo.syscolumns表
    select
    --方法类似,把一下字段就可以了!
    declare @sql nvarchar(4000)
    set @sql=N''
    select @sql=@sql+','+ name from dbo.syscolumns(nolocK) where id=OBJECT_ID('spkfk') and name<>'spid'
    set @sql=STUFF(@sql,1,1,N'')
    print @sql
    exec('select '+@sql+N' from spkfk --where......') 
      

  4.   

    select * from spkfk
    declare @sql nvarchar(4000)
    set @sql=N''
    select @sql=@sql+','+ name from dbo.syscolumns(nolocK) where id=OBJECT_ID('spkfk') and name<>'spid'  --spkfk为表名,spid为不需要的列
    set @sql=STUFF(@sql,1,1,N'')
    print @sql
    exec('select '+@sql+N' from spkfk --where......')
      

  5.   

    视图不可用动态SQL,可以写存储过程。
      

  6.   

    视图只能有一个select语句,不过,可以写成函数,一样的