zoukankan      html  css  js  c++  java
  • 通过脚本获取指定表的所有Insert语句

    --通过脚本获取指定表的所有Insert语句。 

    Create         procedure [dbo].[sp_GetInsertSQL] 
                     @tablename_mask varchar(30) = NULL 
    as 
    begin 
    -- NOTE: If, when executing in the Query Analyzer, the result is truncated, you can remedy 
    --       this by choosing Query / Current Connection Options, choosing the Advanced tab and 
    --       adjusting the value of 'Maximum characters per column'. 
    --       Unchecking 'Print headers' will get rid of the line of dashes. 
     
      declare @tablename       varchar (128) 
      declare @tablename_max   varchar (128) 
      declare @tableid         int 
      declare @columncount     numeric (7,0) 
      declare @columncount_max numeric (7,0) 
      declare @columnname      varchar (100) 
      declare @columntype      int 
      declare @string          varchar (30) 
      declare @leftpart        varchar (max)    
      declare @rightpart       varchar (max)    
      declare @hasident        int 
     
      set nocount on 
     
      -- take ALL tables when no mask is given (!) 
      if (@tablename_mask is NULL) 
      begin 
        select @tablename_mask = '%' 
      end 
     
      -- create table columninfo now, because it will be used several times 
     
      create table #columninfo 
      (num      numeric (7,0) identity, 
       name     varchar(100), 
       usertype smallint) 
     
     
      select name, 
             id 
        into #tablenames 
        from sysobjects 
       where type in ('U' ,'S') 
         and name like @tablename_mask 
     
      -- loop through the table #tablenames 
     
      select @tablename_max  = MAX (name), 
             @tablename      = MIN (name) 
        from #tablenames 
     
      while @tablename <= @tablename_max 
      begin 
        select @tableid   = id 
          from #tablenames 
         where name = @tablename 
     
        if (@@rowcount <> 0) 
        begin 
          -- Find out whether the table contains an identity column 
          select @hasident = max( status & 0x80 ) 
            from syscolumns 
           where id = @tableid 
     
          truncate table #columninfo 
     
          insert into #columninfo (name,usertype) 
          select name, type 
            from syscolumns C 
           where id = @tableid 
            -- and type <> 37            -- do not include timestamps 
     
          -- Fill @leftpart with the first part of the desired insert-statement, with the fieldnames 
     
          select @leftpart = 'select ''insert into ['+@tablename 
          select @leftpart = @leftpart + '] (' 
     
          select @columncount     = MIN (num), 
                 @columncount_max = MAX (num) 
            from #columninfo 
          while @columncount <= @columncount_max 
          begin 
            select @columnname = name, 
                   @columntype = usertype 
              from #columninfo 
             where num = @columncount 
            if (@@rowcount <> 0) 
            begin 
              if (@columncount < @columncount_max) 
              begin 
                select @leftpart = @leftpart + '[' + @columnname + '],' 
              end 
              else 
              begin 
                select @leftpart = @leftpart + '[' + @columnname + '])' 
              end 
            end 
     
            select @columncount = @columncount + 1 
          end 
     
          select @leftpart = @leftpart + ' values(''' 
     
          -- Now fill @rightpart with the statement to retrieve the values of the fields, correctly formatted 
     
          select @columncount     = MIN (num), 
                 @columncount_max = MAX (num) 
            from #columninfo 
     
          select @rightpart = '' 
     
          while @columncount <= @columncount_max 
          begin 
            select @columnname = name, 
                   @columntype = usertype 
              from #columninfo 
             where num = @columncount 
     
            if (@@rowcount <> 0) 
            begin 
     
              if @columntype in (39,47) 
              begin 
                select @rightpart = @rightpart + '+' 
                select @rightpart = @rightpart + 'ISNULL(' + replicate( char(39), 4 ) + '+replace([' + @columnname + '],' + replicate( char(39), 4 ) + ',' + replicate( char(39), 6) + ')+' + replicate( char(39), 4 ) + ',''NULL'')' 
              end 
     
              else if @columntype = 35 
                                       
              begin 
                select @rightpart = @rightpart + '+' 
                select @rightpart = @rightpart + 'ISNULL(' + replicate( char(39), 4 ) + '+replace(convert(varchar(1000),[' + @columnname + '])' + ',' + replicate( char(39), 4 ) + ',' + replicate( char(39), 6 ) + ')+' + replicate( char(39), 4 ) + ',''NULL'')'
     
              end 
     
              else if @columntype in (58,61,111) 
              begin 
                select @rightpart = @rightpart + '+' 
                select @rightpart = @rightpart + 'ISNULL(' + replicate( char(39), 4 ) + '+convert(varchar(20),[' + @columnname + '])+'+ replicate( char(39), 4 ) + ',''NULL'')' 
              end 
     
              else   
              begin 
                select @rightpart = @rightpart + '+' 
                select @rightpart = @rightpart + 'ISNULL(convert(varchar(99),[' + @columnname + ']),''NULL'')' 
              end 
     
     
              if ( @columncount < @columncount_max) 
              begin 
                select @rightpart = @rightpart + '+'',''' 
              end 
     
            end 
            select @columncount = @columncount + 1 
          end 
     
        end 
     
        select @rightpart = @rightpart + '+'')''' + ' from [' + @tablename 
     
        -- Order the select-statements by the first column so you have the same order for 
        -- different database (easy for comparisons between databases with different creation orders) 
        select @rightpart = @rightpart + '] order by 1' 
     
        -- For tables which contain an identity column we turn identity_insert on 
        -- so we get exactly the same content 
     
        if @hasident > 0 
           select 'SET IDENTITY_INSERT ' + @tablename + ' ON' 
     
     --print @leftpart + @rightpart 
        exec ( @leftpart + @rightpart ) 
      
     
        if @hasident > 0 
           select 'SET IDENTITY_INSERT ' + @tablename + ' OFF' 
     
        select @tablename      = MIN (name) 
          from #tablenames 
         where name            > @tablename 
      end 
     
    end  
      
       
      
     

  • 相关阅读:
    首先,编写一个类ChongZai,该类中有3个重载的方法void print();其次, 再编写一个主类来测试ChongZai类的功能。
    创建一个Point类,有成员变量x,y,方法getX(),setX(),还有一个构造方 法初始化x和y。创建类主类A来测试它。
    机动车
    people 0919
    创建一个三角形类,成员变量三边,方法求周长,创建类主类A来测试它。
    百鸡百钱修改
    java 面向对象--------时间作业
    序列化、反序列化
    通讯录
    Java正则表达式
  • 原文地址:https://www.cnblogs.com/mynameltg/p/4043380.html
Copyright © 2011-2022 走看看