表中的数据导出为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

原文地址:https://www.cnblogs.com/bigmouthz/p/538341.html