用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
sky_blue的公告
文章分类
    存档

    原创  生成插入语句的存储过程 收藏

      drop   proc   proc_insert  
      go  
      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   
       

    发表于 @ 2007年12月30日 20:07:00 | 评论( loading... ) | 编辑| 举报| 收藏

    旧一篇:转置的存储过程 | 新一篇:树的宽度优先遍历

    • 发表评论
    • 评论内容:
    •  
    Copyright © sky_blue
    Powered by CSDN Blog