也许会碰到这样的问题:
有一张表有几十个或者上百个栏位,备份后删除了一部分资料,过后发现问题需要恢复其中一部分资料,但有几个栏位不需要恢复 (比如 100 个栏位,只需恢复 97 个)
初学阶段:
对于一个初学者可能是个噩梦:”oh, my god! 难道要手打 97 个栏位???”,一边从网上找案例,一边苦思冥想,折腾十几分钟,最终还是手打…
入门阶段:
对于了解资料库但不是很擅长编写 sql 语句 (涉及系统表) 的技术人员:” 嗯…这个可以从建表语句或者用 sp_help table_name 拿到所有栏位,只需要将栏位复制出来整理一下…”,于是复制贴上,改栏位加符号,处理了几分钟
进阶阶段:
对于熟悉资料及编写 sql 语句的技术人员:” 系统表里面存放表的栏位资讯,在查询栏位时可以把不需要的栏位剔除,拼接出可直接用于执行的语句…”,几分钟后,敲出程式码:
declare @into_table_name varchar(50)
declare @select_table_name varchar(50)
declare @except_columns varchar(100)
declare @where_condition varchar(500)
–原表
set @into_table_name=”
–备份表
set @select_table_name=”
–排除的栏位
set @except_columns=”
–where 条件
set @where_condition=’ where 1=2′
declare @insert_str varchar(max)
declare @column_str varchar(max)
–拼接栏位
set @column_str=(
select b.name+’,’
from sysobjects a,syscolumns b
where a.id=b.id
and a.name=@table_name
and b.name not in(@except_columns)
for xml path(”))
–删除末尾逗号
select @column_str=substring(@column_str,1,len(@column_str)-1)
–拼接 sql 语句
set @insert_str=’insert into ‘+@into_table_name+'(‘+@column_str+’) select ‘+@column_str+’ from ‘+@select_table_name+@where_condition
select @insert_str
检查无误后:exec(@insert_str)
类似的问题再次出现
初学者:”##$#@!@#!@#%$#%…”
入门者:” 唉…”
进阶者笑了笑,从容不迫的替换引数,十几秒后一切搞定…