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

2021-05-23 03:22:58 字數 3396 閱讀 9412

將資料庫中的資料轉換成insert語句的t-sql**如下:

if exists(select * from sys.objects where name = 'sp_generate_insert_script')

drop proc sp_generate_insert_script

gocreate procedure sp_generate_insert_script

@table_list varchar(8000)='*'

asdeclare @table_name  nvarchar(128)

declare @column_list varchar(8000)

declare @values_list varchar(8000)

declare @sql   varchar(8000)

declare @msg   varchar(8000)

create table #result(sql varchar(8000))

if @table_list='*'

begin

select @table_list=@table_list+','+name from sys.objects where type='u' and name <> '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,smalldatetime

'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)

)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 'table1'--轉換表table1中的資料

sp_generate_insert_script 'table1,table2,table3'--轉換表table1,table2,table3中的資料

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

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

2.支援標識列的匯出

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

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

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

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

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 t...

將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...