程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 為sql server 數據庫表數據生成insert 腳本

為sql server 數據庫表數據生成insert 腳本

編輯:關於SqlServer
使用SQL Server 自帶的“生成SQL腳本”工具,可以生成創建表、視圖、存儲過程等的SQL腳本。那麼,能否將表中的數據也生成為SQL腳本,在查詢分析器中執行這些腳本後自動將數據導入到SQL Server中呢?答案是肯定的,網上收集資料如下: 
CREATE PROCEDURE   dbo.OutputData     
 @tablename   sysname      
 AS      
 declare   @column   varchar(1000)     
 declare   @columndata   varchar(1000)     
 declare   @sql   varchar(4000)     
 declare   @xtype   tinyint      
 declare   @name   sysname      
 declare   @objectId   int      
 declare   @objectname   sysname      
 declare   @ident   int      

 set   nocount   on      
 set   @objectId=object_id(@tablename)     
 if  @objectId   is   null   --  

判斷對象是否存在     
     begin      
      print  @tablename + ''對象不存在''     
      return      
    end     
 set @objectname=rtrim(object_name(@objectId))     
 if @objectname is null or charindex(@objectname,@tablename)=0
    begin      
      print  @tablename + ''對象不在當前數據庫中''      
      return      
    end        
 if  OBJECTPROPERTY(@objectId,''IsTable'')   <   >   1   --   判斷對象是否是表     
    begin      
      print  @tablename + ''對象不是表''     
      return      
    end       


 select   @ident=status&0x80   from   syscolumns   where   id=@objectid   and   status&0x80=0x80         
 if @ident is   not   null      
    print   ''SET   IDENTITY_INSERT   ''+ @TableName + ''   ON''    
 --定義游標,循環取數據並生成Insert語句
 declare  syscolumns_cursor cursor for   
    select   c.name,c.xtype   from   syscolumns   c     
      where   c.id=@objectid     
      order   by   c.colid    
 --打開游標
 open   syscolumns_cursor     
 set  @column=''''     
 set  @columndata=''''     
 fetch   next   from   syscolumns_cursor   into   @name,@xtype     
 

blue">while   @@fetch_status   <> -1     
    begin      
    if   @@fetch_status   <> -2     
      begin      
      if   @xtype   not   in(189,34,35,99,98)   --timestamp不需處理,image,text,ntext,sql_variant 暫時不處理     
        begin      
        set   @column=@column + 
          case   when   len(@column)=0   then ''''  
                 else   '',''
                 end + @name     
        set   @columndata = @columndata + 
          case   when   len(@columndata)=0   then   ''''   
        else   '','''','''',''
                 end  + 
          case   when  @xtype   in(167,175) then   ''''''''''''''''''+''+@name+''+''''''''''''''''''                --varchar,char     
                 when   @xtype   in(231,239)   then   ''''''N''''''''''''+''+@name+''+''''''''''''''''''             --nvarchar,nchar     
                 when   @xtype=61   then   ''''''''''''''''''+convert(char(23),''+@name+'',121)+''''''''''''''''''   --datetime     
                 when   @xtype=58   then   ''''''''''''''''''+convert(char(16),''+@name+'',120)+''''''''''''''''''   --smalldatetime     
                  when   @xtype=36   then   ''''''''''''''''''+convert(char(36),''+@name+'')+''''''''''''''''''       --uniqueidentifIEr     
                 else   @name   
                 end      
        end      
      end      
    fetch   next   from   syscolumns_cursor   into   @name,@xtype     
    end      
 close   syscolumns_cursor     
 deallocate   syscolumns_cursor         
 set  @sql=''set   nocount   on   select   ''''insert   ''+@tablename+''(''+@column+'')   values(''''as   ''''--'''',''+@columndata+'','''')''''   from   ''+@tablename        
 print   ''--''+@sql     
 exec(@sql)         
 if   @ident   is   not   null  &nbsp;   
 print  ''SET   IDENTITY_INSERT   ''+@TableName+''   OFF''    

調用時 exec   OutputData   ''myuser'' 其中myUser中當前數據庫中存在的表。

另外方丈的:  
  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&n

bsp;  ''''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&nbsp;  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  

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  
   
  ---------------------------------------------------------------------------------------  
  小干部的:  
  create     proc   spgeninsertsql  
  @tablename   as   varchar(100)  
  as  
  --declare   @tablename   varchar(100)  
  --set   @tablename   =   orders  
  --set   @tablename   =   eeducation  
  declare   xcursor   cursor   for  
  select   name,xusertype  
  from   syscolumns  
  where   (id   =   object_id(@tablename))  
  declare   @f1   varchar(100)  
  declare   @f2   integer  
  declare   @sql   varchar(8000)  
  set   @sql   =

select   insert   into     +   @tablename   +     values(  
  open   xcursor  
  fetch   xcursor   into   @f1,@f2  
  while   @@fetch_status   =   0  
  begin  
          set   @sql   =@sql   +  
                              +   case   when   @f2   in   (35,58,99,167,175,231,239,61)   then     +   case   when     +   @f1   +     is   null   then     else     end   +       else   +   end  
                              +   replace(isnull(cast(   +   @f1   +     as   varchar),null),,)    
                              +   case   when   @f2   in   (35,58,99,167,175,231,239,61)   then     +   case   when     +   @f1   +     is   null   then     else     end   +       else   +   end  
                              +   char(13)   +   ,    
          fetch   next   from   xcursor   into   @f1,@f2  
  end  
  close   xcursor  
  deallocate   xcursor  
  set   @sql   =   left(@sql,len(@sql)   -   5)   +     +   )   from     +   @tablename  
  print   @sql  
  exec   (@sql)  




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved