表中的資料匯出為insert語句的簡單方法

來源:互聯網
上載者:User

因項目需要,有時要求將一個表中的記錄匯出來,結合網上搜尋的一些代碼,而成此文 。因時間過長已找不出原創作者,謹請原諒

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.