许多表,通过存储过程里的游标,我能逐个遍历每个表,但是有一个小问题:
那就是这些表结构略有差别,比如表示人名的字段,在一部分表里面叫a,在另一部分里面叫b。且已知一共就只这两种叫法,那么该如何select出这个表示人名的字段,并组合到一起?
例如:
1号表
a 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中?
那就是这些表结构略有差别,比如表示人名的字段,在一部分表里面叫a,在另一部分里面叫b。且已知一共就只这两种叫法,那么该如何select出这个表示人名的字段,并组合到一起?
例如:
1号表
a 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中?
union all
select * from tb2
...
select * from tbn
order by a , birthday
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
遍历所有syscolumns表中的name字段,如果某个字段名为a或者b,则赋值给@fieldname通过object_name(syscolumns.id)等获取到表名,并拼接变量@sql=@sql+'union select '+@fieldname +' from '+object_name(syscolumns.id),最后在进行其他加工。