假设一个表有10个字段
其中有一个是MissionID
我要取出除了这个MissionID外的其他9个字段
除了select后面跟9个字段名的写法之外
还有其他办法么?
因为这样的写法如果这个表里面+字段
或者字段名改变
我势必要去修改select语句了

解决方案 »

  1.   

    到syscolumns里取字段,然后拼语句
      

  2.   

    CREATE TABLE TB([MissionID] INT, [col2] INT, [col3] INT, [col4] INT)
    INSERT TB 
    SELECT 1, 2, 3, 4 UNION ALL 
    SELECT 2, 3, 4, 5 UNION ALL 
    SELECT 3, 4, 5, 6DECLARE @STR VARCHAR(8000)
    SET @STR=''
    SELECT @STR=@STR+','+NAME 
    FROM syscolumns
    WHERE ID=OBJECT_ID('TB') AND NAME<>'MissionID'EXEC('SELECT MissionID'+@STR+' FROM TB')
    DROP TABLE TB
    /*
    MissionID   col2        col3        col4
    ----------- ----------- ----------- -----------
    1           2           3           4
    2           3           4           5
    3           4           5           6
    */
      

  3.   

    sql如果支持 select a.1,a.3,a.9
    from tablexxx a
    where a.2>a.8就好了上面的语法,表别名后跟数值x,等于该表的第x个字段
    也不会与现有的sql语法冲突
      

  4.   

    希望由一线的开发人员提出需求来倒逼数据库引擎的开发商、标准制定者像sql2000、2005、2008都没能支持:select top n skip m * from ...这样最基本的分页
    分明是据库引擎的开发商、标准制定者已经脱离一线的开发者了
      

  5.   

    有一个方法,就是在过程里拼接SQL字段。
    根据syscolumns 表的数据来判断。但是楼主自己衡量下实际需要。
      

  6.   

    declare @sql  varchar(100)set  @sql=''select @sql=@sql+','+name from syscolumns where id=object_id('表名') and name<>'列名'select @sql='select '+right(@sql,len(@sql)-1)+' from 表名'exec (@sql)