为SQL Server表查询数据生成insert脚本

-- ======================================================
 
--根据表中数据生成insert语句的存储过程
 
--建立存储过程,执行 proc_insert 表名
 
--感谢Sky_blue
 
-- ======================================================
 
--exec proc_insert 'MoveType'
 
CREATE  proc proc_insert (@tablename  varchar (256))
 
as
 
begin
 
        set  nocount  on
 
        declare  @sqlstr  varchar (4000)
 
        declare  @sqlstr1  varchar (4000)
 
        declare  @sqlstr2  varchar (4000)
 
        select  @sqlstr= 'select ' 'insert ' +@tablename
 
        select  @sqlstr1= ''
 
        select  @sqlstr2= ' ('
 
        select  @sqlstr1=  ' values ( ' '+'
 
        select  @sqlstr1=@sqlstr1+col+ '+' ',' '+'  ,@sqlstr2=@sqlstr2+ name  + ','  from  ( select  case 
 
--     when a.xtype =173 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
 
        when  a.xtype =104  then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + 'convert(varchar(1),' +a. name  + ')' + ' end'
 
        when  a.xtype =175  then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + '' '' '' '' '+' + 'replace(' +a. name + ',' '' '' '' ',' '' '' '' '' '' ')'  '+' '' '' '' '' + ' end'
 
        when  a.xtype =61   then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + '' '' '' '' '+' + 'convert(varchar(23),' +a. name  + ',121)' '+' '' '' '' '' + ' end'
 
        when  a.xtype =106  then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + 'convert(varchar(' + convert ( varchar (4),a.xprec+2)+ '),' +a. name  + ')' + ' end'
 
        when  a.xtype =62   then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + 'convert(varchar(23),' +a. name  + ',2)' + ' end'
 
        when  a.xtype =56   then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + 'convert(varchar(11),' +a. name  + ')' + ' end'
 
        when  a.xtype =60   then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + 'convert(varchar(22),' +a. name  + ')' + ' end'
 
        when  a.xtype =239  then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + '' '' '' '' '+' + 'replace(' +a. name + ',' '' '' '' ',' '' '' '' '' '' ')'  '+' '' '' '' '' + ' end'
 
        when  a.xtype =108  then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + 'convert(varchar(' + convert ( varchar (4),a.xprec+2)+ '),' +a. name  + ')' + ' end'
 
        when  a.xtype =231  then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + '' '' '' '' '+' + 'replace(' +a. name + ',' '' '' '' ',' '' '' '' '' '' ')'  '+' '' '' '' '' + ' end'
 
        when  a.xtype =59   then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + 'convert(varchar(23),' +a. name  + ',2)' + ' end'
 
        when  a.xtype =58   then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + '' '' '' '' '+' + 'convert(varchar(23),' +a. name  + ',121)' '+' '' '' '' '' + ' end'
 
        when  a.xtype =52   then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + 'convert(varchar(12),' +a. name  + ')' + ' end'
 
        when  a.xtype =122  then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + 'convert(varchar(22),' +a. name  + ')' + ' end'
 
        when  a.xtype =48   then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + 'convert(varchar(6),' +a. name  + ')' + ' end'
 
--     when a.xtype =165 then 'case when '+a.name+' is null then ''NULL'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'
 
        when  a.xtype =167  then  'case when ' +a. name + ' is null then ' 'NULL' ' else ' + '' '' '' '' '+' + 'replace(' +a. name + ',' '' '' '' ',' '' '' '' '' '' ')'  '+' '' '' '' '' + ' end'
 
        else  '' 'NULL' ''
 
        end  as  col,a.colid,a. name
 
        from  syscolumns a  where  a.id = object_id(@tablename)  and  a.xtype <>189  and  a.xtype <>34  and  a.xtype <>35  and   a.xtype <>36
 
        )t  order  by  colid
 
        
 
        select  @sqlstr=@sqlstr+ left (@sqlstr2,len(@sqlstr2)-1)+ ') ' + left (@sqlstr1,len(@sqlstr1)-3)+ ')' ' from ' +@tablename
 
--  print @sqlstr
 
        exec ( @sqlstr)
 
        set  nocount  off
 
end
 
GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值