`
wangyihust
  • 浏览: 437136 次
文章分类
社区版块
存档分类
最新评论

为sql server 数据库表数据生成insert 脚本

阅读更多
    使用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     
 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      
 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   ''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  

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)  


分享到:
评论

相关推荐

    sqlserver表数据生成insertsql脚本(导出成insertsql脚本).pdf

    SQL Server表数据生成INSERT SQL脚本 SQL Server是一种强大的关系数据库管理系统,提供了多种方式来生成INSERT SQL脚本,以便将数据导出到其他数据库或系统中。在本文中,我们将介绍如何使用SQL Server 2008中文版...

    Sql Server导出数据 INSERT 脚本

    可以将数据库中的数据导出insert into脚本, sql server2008以上版本已经自带导出数据库数据成insert脚本功能,该工具针对2005以下版本.使用时先选择数据库服务器地址,在右侧选择Sql Server login,输入数据库账号...

    SQL SERVER 将select数据生成insert语句

    5. **保存与执行**:用户可以保存生成的脚本为.sql文件,或者直接在连接的SQL Server实例上执行。 通过这样的工具,数据迁移和备份过程变得简单且高效,避免了手动编写大量`INSERT`语句的繁琐工作。特别是在处理...

    Sqlserver表数据导出成Insert语句的工具

    此工具可以将SQL Server表数据导出成Insert语句。SQL Server的导入导出功能可以导出创建数据库各对象的脚本,却不提供导出目标表的现有数据为Insert语句的功能,此工具可以将SQL Server表数据导出成Insert语句。

    SQL Server表数据导出成Insert语句的工具

    在SQL Server数据库管理中,有时我们需要将表中的数据导出为Insert语句,这在数据迁移、备份或测试环境中非常常见。"SQL Server表数据导出成Insert语句的工具"是一个专门为此目的设计的应用程序,它能帮助数据库管理...

    SQLSERVER脚本生成工具,表数据生成SQL脚本

    描述中提到的“表数据生成SQL脚本”功能,具体来说,是指该工具能将SQL Server数据库中某个表的数据转换为INSERT语句的集合。这些INSERT语句可以按照一定的顺序执行,以复原表中的所有记录。例如,如果你有一个名为...

    生成数据库表insert语句脚本

    - **使用数据库工具**:大多数数据库管理工具(如MySQL Workbench, SQL Server Management Studio等)都提供了生成INSERT语句的功能。 - **编程方式**:通过编程语言(如Python, Java)连接数据库,遍历表中所有行...

    SQLSERVER数据库Insert语句生成工具1.0.rar

    一款可自定义条件导出数据工具。SQLSERVER版数据库Insert语句生成工具。 因SQL server management studio及其它三方数据库管理工具无法做到导出SQL server数据库指定条件的数据。所以小编介绍一种python编写的脚本。

    SQL server自动生成Insert脚本

    可以根据表内容自动生成insert 脚本,select 脚本,update脚本; blob和text数据类型的字段不支持。 可以方便定制需要的字段和条件。 维护SQL server 十分方便的小工具。 在不同数据库或服务器之间传递数据非常...

    sql server 生成 insert 脚本 工具

    SQL Server生成INSERT脚本工具是一种实用程序,它能够帮助数据库管理员和开发人员高效地从现有的SQL Server数据库中自动生成插入语句(INSERT scripts),这些语句可以用于在其他数据库或备份环境中重现数据。...

    SQL Server 表Insert脚本生成工具

    SQL Server 表Insert脚本生成工具是一款实用的小型应用程序,专为数据库管理员和开发者设计,旨在简化数据库数据的导入和导出过程。在SQL Server环境中,当需要将现有数据迁移到新的环境,或者在软件升级时确保数据...

    连接SQL数据库,自动生成Insert脚本(DELPHI源代码)

    通过以上步骤,我们可以编写一个Delphi程序,实现连接到SQL Server数据库,并自动生成Insert脚本的功能。这个小工具对于数据库开发和管理非常有用,可以方便地进行数据迁移或备份。在实践中,还可以根据具体需求进行...

    数据库数据生成insert脚本(MSSQL版)

    标题“数据库数据生成insert脚本(MSSQL版)”涉及的是在Microsoft SQL Server环境下,如何自动生成用于插入数据的SQL脚本。这样的脚本在数据迁移、备份、同步或测试场景中非常实用,可以极大地提高工作效率。描述中...

    SQL SERVER:把表里的数据导出成为INSERT INTO脚本的存储过程

    根据提供的文件信息,我们可以构建一个详细的SQL Server存储过程来实现将表中的数据转换为`INSERT INTO`脚本的功能。此存储过程将适用于多种数据类型,并能够动态生成插入语句,以便用户可以方便地导出数据作为脚本...

    SQLServer数据库表中数据导出成SQL语句工具

    针对这个需求,存在一种名为“SQLServer数据库表中数据导出成SQL语句工具”的实用程序,它能够帮助我们高效地完成这项任务。这个工具通常以MHT(Multi-Part/Related)格式提供,这是一种单一文件Web页面存储格式,...

    PyCharm生成数据库表结构语句脚本以及数据库数据insert语句的方法.docx

    PyCharm 生成数据库表结构语句脚本和数据库数据 insert 语句的方法 PyCharm 是一款功能强大且流行的集成开发环境(IDE),它提供了许多实用的功能来帮助开发者更方便地开发、调试和维护项目。其中,PyCharm 的 ...

    MSsql数据表生成sql脚本

    在SQL Server Management Studio (SSMS) 中,你可以右键点击数据库或具体的数据表,选择“任务” -&gt; “生成脚本”,然后按照向导设置脚本的选项,如是否包含数据、脚本的目标版本等,最后即可生成对应的SQL脚本文件...

    数据库Insert语句生成工具(SQLSERVER版).zip

    数据库Insert语句生成工具是针对SQL Server...综上所述,这个SQL Server数据库Insert语句生成工具结合了Python编程、SQL Server连接技术以及数据库管理的最佳实践,为数据迁移和初始化提供了一个方便快捷的解决方案。

    SQLserver 2008将数据导出到Sql脚本文件的方法

    请看下面的操作图解。 1.使用Sql Server Management Studio 2008 连接数据库。 ...SQL Server 2008将数据导出为脚本 从SQL SERVER 2008开始,我们就可以很方便的导出数据脚本,而无需再借助存储过

    SQL SERVER自动导出Word数据库文档

    在SQL SERVER环境中,有时我们需要将数据库的信息以报告的形式呈现,比如导出为Word文档,方便阅读和分享。"SQL SERVER自动导出Word数据库文档"这一功能就满足了这样的需求。这个功能主要应用于SQL SERVER 2000、...

Global site tag (gtag.js) - Google Analytics