將資料庫中的資料轉換成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...