dongfangho 发表于 2018-10-16 11:16:56

SQLServer快速生成多字段sql语句

  也许会碰到这样的问题:
  有一张表有几十个或者上百个字段,备份后删除了一部分数据,过后发现问题需要恢复其中一部分数据,但有几个字段不需要恢复(比如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)
  类似的问题再次出现
  初学者:"##$#@!@#!@#%$#%..."
  入门者:"唉..."
  进阶者笑了笑,从容不迫的替换参数,十几秒后一切搞定...
  于是开始了打怪升级道路:初学者->入门者->进阶者->......

页: [1]
查看完整版本: SQLServer快速生成多字段sql语句