zoukankan      html  css  js  c++  java
  • 表中的数据导出为insert语句的简单方法

    因项目需要,有时要求将一个表中的记录导出来,结合网上搜索的一些代码,而成此文 。因时间过长已找不出原创作者,谨请原谅

    Create procedure pGetInsertSQL (@tablename varchar(256))
    ---WITH ENCRYPTION
    as
    begin
    ---得到表中的SQL
     -- declare @tablename varchar(256)
     -- set @tablename = 'Design_DBPageStruct'
     --Create Table SQLtmp
     --(
     --sql varchar(4000)
     --)
    ---Delete  from SQLtmp

    if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SQLtmp]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    Create Table SQLtmp
    (
    sql varchar(4000)
    )


      declare @sql varchar(4000)
      declare @sqlValues varchar(4000)
      set @sql =' ('
      set @sqlValues = 'values (''+'
      select @sqlValues = @sqlValues + cols + ' + '','' + ' ,@sql = @sql + '[' + name + '],'
      from
        (select case
                when xtype in (48,52,56,59,60,62,104,106,108,122,127)                               
                     then 'case when '+ name +' is null then ''NULL'' else ' + 'cast('+ name + ' as varchar)'+' end'
                when xtype in (58,61)
                     then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast('+ name +' as varchar)'+ '+'''''''''+' end'
                when xtype in (167)
                     then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+'''''''''+' end'
                when xtype in (231)
                     then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'replace('+ name+','''''''','''''''''''')' + '+'''''''''+' end'
                when xtype in (175)
                     then 'case when '+ name +' is null then ''NULL'' else '+''''''''' + ' + 'cast(replace('+ name+','''''''','''''''''''') as Char(' + cast(length as varchar)  + '))+'''''''''+' end'
                when xtype in (239)
                     then 'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + ' + 'cast(replace('+ name+','''''''','''''''''''') as Char(' + cast(length as varchar)  + '))+'''''''''+' end'
                else '''NULL'''
                end as Cols,name
          from syscolumns 
          where id = object_id(@tablename)
        ) T
      set @sql ='insert into SQLtmp (sql) select ''INSERT INTO ['+ @tablename + ']' + left(@sql,len(@sql)-1)+') ' + left(@sqlValues,len(@sqlValues)-4) + ');'' from '+@tablename + '  '
    --  print @sql
      exec (@sql)
     
    ---Select sql from SQLtmp
    ---Select sql from SQLtmp  FOR XML AUTO
    end

    go


    应用方法

    Create Procedure pBackInsertSQL
    As
    Begin
    if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SQLtmp]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    Create Table SQLtmp
    (
    sql varchar(4000)
    )
    else
    Truncate Table SQLtmp


    print '正在备份表' + 'Cfg_DataDictionary'
    Execute pGetInsertSQL 'Cfg_DataDictionary'

    print '插入中间分隔符'
    Insert into SQLtmp(sql) values ('*************************************')


    print '正在备份表' + 'Shuttle'
    Execute pGetInsertSQL 'Shuttle'

    print '插入中间分隔符'
    Insert into SQLtmp(sql) values ('*************************************')

    print '正在备份表' + 'Shuttle_Param'
    Execute pGetInsertSQL 'Shuttle_Param'

    print '插入中间分隔符'
    Insert into SQLtmp(sql) values ('*************************************')


    Declare @Cnt varchar(10)
    Select @Cnt = convert(varchar(10),count(sql)) From SQLtmp

    Print '共计备份数据 '+@Cnt + '条'
    End

  • 相关阅读:
    [hdu7034]Array
    [hdu7012]Miserable Faith
    CF 1559D2. Mocha and Diana
    CF 1447E Xor Tree
    2021年-华为杯-物联网大赛(1)
    去掉e-select下拉框的小三角图案
    element中使用select组件 下拉框位置偏移的解决方法
    SQL注入之高权限注入
    SQL注入基础简介
    增删改查的实现
  • 原文地址:https://www.cnblogs.com/bigmouthz/p/538341.html
Copyright © 2011-2022 走看看