许多表,通过存储过程里的游标,我能逐个遍历每个表,但是有一个小问题:
那就是这些表结构略有差别,比如表示人名的字段,在一部分表里面叫a,在另一部分里面叫b。且已知一共就只这两种叫法,那么该如何select出这个表示人名的字段,并组合到一起?
例如:
1号表
  birthday
张三  1980-1-1
李四  1970-9-82号表
b   birthday
阿毛  1994-3-4
阿狗  1976-3-23...n号表
b   birthday
王朝  1992-3-8
马汉  1975-1-6需要的结果是
New   birthday
张三  1980-1-1
李四  1970-9-8
阿毛  1994-3-4
阿狗  1976-3-23
王朝  1992-3-8
马汉  1975-1-6问题:请教当通过存储过程里面的游标遍历到某个表tableN的时候,我如何去判断他有a字段还是b字段,并把这个字段的结果插入到一个表x中?

解决方案 »

  1.   

    如果类型一样,使用union all,以第一个表为准.不必担心.
      

  2.   

    select * from tb1
    union all
    select * from tb2
    ...
    select * from tbn
    order by a , birthday
      

  3.   

    SQLServer查询所有表所有字段包含xx的信息从系统表自动生成sql语句来运行得到结果
    select a.name as columnname,object_name(a.id)as tablename into t from syscolumns a,sysobjects b,systypes c where a.id=b.id   and a.xtype=c.xtypeand b.xtype='u'and c.name in('varchar','nvarchar','char','nchar','text','ntext')and object_name(a.id)<>'t' go create function udf_genSQL(@tableName varchar(1000),@keyword varchar(1000))returns varchar(8000)asbegin    declare @sql varchar(8000)    set @sql='select * from '+@tableName +' where 1=1 '    select @sql=@sql+' or '+       columnname +' like ''%'+@keyword+'%''' from t    where tablename=@tablename    return @sqlendgo select dbo.udf_genSQL(tableName,'a') from t group by tablename drop table tdrop function dbo.udf_genSQL  
      

  4.   

    我想思路可能是:
    遍历所有syscolumns表中的name字段,如果某个字段名为a或者b,则赋值给@fieldname通过object_name(syscolumns.id)等获取到表名,并拼接变量@sql=@sql+'union select '+@fieldname +' from '+object_name(syscolumns.id),最后在进行其他加工。