zoukankan      html  css  js  c++  java
  • 为sql server 表数据生成创建的储存过程(生成insert 脚本) (转)

    为sql server 表数据生成创建的储存过程(生成insert 脚本)

    使用SQL Server 2000自带的“生成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中当前数据库中存在的表

  • 相关阅读:
    linux sysfs (2)
    微软——助您启动云的力量网络虚拟盛会
    Windows Azure入门教学系列 全面更新啦!
    与Advanced Telemetry创始人兼 CTO, Tom Naylor的访谈
    Windows Azure AppFabric概述
    Windows Azure Extra Small Instances Public Beta版本发布
    DataMarket 一月内容更新
    和Steve, Wade 一起学习如何使用Windows Azure Startup Tasks
    现实世界的Windows Azure:与eCraft的 Nicklas Andersson(CTO),Peter Löfgren(项目经理)以及Jörgen Westerling(CCO)的访谈
    正确使用Windows Azure 中的VM Role
  • 原文地址:https://www.cnblogs.com/xyicheng/p/1198472.html
Copyright © 2011-2022 走看看