將資料庫中的資料轉換為insert語句

2021-04-02 20:51:56 字數 3011 閱讀 4273

create table #result(sql varchar(8000))

if @table_list='*'

begin

select @table_list=@table_list+','+name

from sysobjects

where xtype='u' and name<>n'dtproperties'

set @table_list=stuff(@table_list,1,2,'')

endwhile @table_list<>''

begin

if charindex(',',@table_list)>0

select @table_name=left(@table_list,charindex(',',@table_list)-1),

@table_list=stuff(@table_list,1,charindex(',',@table_list),'')

else

select @table_name=@table_list,

@table_list=''

if exists(select 1 from sysobjects where xtype='u' and name=@table_name)

begin

select @column_list='',@values_list=''

select

@column_list=@column_list+','+name,

@values_list=@values_list+'+'',''+'+

case when xtype in(175,167,36) then--char,varchar,uniqueidentifier

'isnull(''''''''+replace('+name+','''''''','''''''''''')+'''''''',''null'')'

when xtype in(239,231) then--nchar,nvarchar

'isnull(''n''''''+replace('+name+','''''''','''''''''''')+'''''''',''null'')'

when xtype in(61,58) then--datetime,**alldatetime

'isnull(''''''''+convert(char(23),'+name+',121)+'''''''',''null'')'

else--digital

'isnull(convert(varchar(20),'+name+'),''null'')'

endfrom (select a.name,a.xtype

from syscolumns a,sysobjects b

where b.xtype='u' and b.name=@table_name and a.id=b.id

and a.xtype not in(173,165,34,35,99,98,189)

--not binary,varbinary,image,text,ntext,sql_variant,timestamp

)tselect @column_list=stuff(@column_list,1,1,''),

@values_list=stuff(@values_list,1,4,''),

@sql='select ''insert into '+@table_name+'('+@column_list+')'

+' values('''+@values_list+'+'')'' sql from ['+@table_name+']'

if objectproperty(object_id(@table_name),'tablehasidentity')=1

insert into #result(sql)

exec('select ''--table name: '+@table_name+''' sql union all '

+'select ''set identity_insert '+@table_name+' on '' sql union all '

+@sql+' union all '

+'select ''set identity_insert '+@table_name+ ' off '' sql')

else

insert into #result(sql)

exec('select ''--table name: '+@table_name+''' sql union all '+@sql)

endelse

begin

set @msg='can''t generate the insert script of the table '''+@table_name

+''', because it does not exist in the system catalog.'

drop table #result

raiserror(@msg,16,1)

return

endend

select sql from #result

drop table #result

go呼叫格式舉例:

sp_generate_insert_script 'tb'--轉換表tb中的資料

sp_generate_insert_script 't1,t2,t3'--轉換表t1,t2,t3中的資料

sp_generate_insert_script '*'--轉換所有表中的資料

優點:1.支援三種引數格式,呼叫方便

2.支援標識列的匯出

3.將結果放在乙個結果集中,方便拷貝

缺點:1.不支援以下型別:binary,varbinary,image,text,ntext,sql_variant,timestamp

2.由於受sql server字串長度影響(8000b),若表中字段過多或表中資料過長會被截斷而出錯,但一般的需求可以滿足,最大可以支援每表100個字段左右,每條記錄最大支援為6-7kb(視欄位多少及欄位名稱長度而定)

將資料庫中的資料轉換為insert語句

將資料庫中的資料轉換成insert語句的t sql 如下 if exists select from sys.objects where name sp generate insert script drop proc sp generate insert script gocreate proce...

將Excel轉換為Oracle資料庫中的一張表

通過microsoft.jet.oledb.4.0 方式可以實現使用ado.net訪問excel的目的,其轉換流程為 web.config檔案 excelconnection connectionstring data source c inetpub wwwroot exceltooracle e...

sql server 資料庫中null 轉換為 0

在開發時遇到乙個這樣的問題,一張表a中有兩個money型別的資料字段,有些值是null,結果用 select columna columnb from a 得到的結果集中,當 columna columnb 其中乙個是null時,結果就為null 而我的本意是,null當成0計算 這樣就可以了 se...