数据库骚操作2——列名获取

后台数据库操作的时候,有时候需要将数据从备份表中插回到系统表里。虽然可以简单的用insert into t_gl_balance select * from t_gl_balancebak,但是在以下场景不能直接使用:
1、包含种子列
2、包含计算列
3、包含时间戳
4、源表中列的排序与目标表中列的排序不相同,因为上面语句并没有显式列出列名
这种情况,就需要显式列出所有的列名了。显式列出所有的列名,一两个表还算可以,多个表就让人头痛了,那么,有什么简单快捷的方法可以获取所有普通列的列名呢?
当。。。当。。。当。。。当。。。
【存储过程】
可以直接使用以下存储过程:
注意:下面方案没有排除种子列,因为种子列是可以通过修改表的参数为允许插入种子列来规避直接插入报错问题。
--存储过程
if exists (select 1 from sys.objects where name='sp_columncollect' and type='P')
drop procedure sp_columncollect
go
create procedure sp_columncollect
@ftablename nvarchar(100),
@string nvarchar(2000) out
as
if not exists (select 1 from sys.tables where name like 'hb_columncollect')
create table hb_columncollect(ffieldname nvarchar(100) ,fid int )
delete from hb_columncollect
exec('insert into hb_columncollect(ffieldname,fid)
select name,column_id from sys.columns t where object_id=OBJECT_ID('''+@ftablename+''') an
数据库骚操作2——列名获取
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



