根據表中資料生成insert語句的儲存過程

2021-04-13 13:12:29 字數 3518 閱讀 8189

-- 根據表中資料生成insert語句的儲存過程

alter proc proc_insert (@tablename varchar(256), @wherestr nvarchar(1000))

as -- 表名稱

begin

set nocount on

declare @sqlstr varchar(4000),

@sqlstr1 varchar(4000),

@sqlstr2 varchar(4000)

select @sqlstr='select ''insert into '+@tablename

select @sqlstr1= ' values ( ''+', @sqlstr2='('

select @sqlstr1=@sqlstr1+col+'+'', ''+' , @sqlstr2=@sqlstr2+name +', ' from(select case

-- when a.xtype =173 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'

when a.xtype =104 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar(1),'+a.name +')'+' end'

when a.xtype =175 then 'case when '+a.name+' is null then ''null'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

when a.xtype =61 then 'case when '+a.name+' is null then ''null'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'

when a.xtype =106 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'

when a.xtype =62 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar(23),'+a.name +',2)'+' end'

when a.xtype =56 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar(11),'+a.name +')'+' end'

when a.xtype =60 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar(22),'+a.name +')'+' end'

when a.xtype =239 then 'case when '+a.name+' is null then ''null'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

when a.xtype =108 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar('+convert(varchar(4),a.xprec+2)+'),'+a.name +')'+' end'

when a.xtype =231 then 'case when '+a.name+' is null then ''null'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

when a.xtype =59 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar(23),'+a.name +',2)'+' end'

when a.xtype =58 then 'case when '+a.name+' is null then ''null'' else '+'''''''''+'+'convert(varchar(23),'+a.name +',121)'+ '+'''''''''+' end'

when a.xtype =52 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar(12),'+a.name +')'+' end'

when a.xtype =122 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar(22),'+a.name +')'+' end'

when a.xtype =48 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar(6),'+a.name +')'+' end'

-- when a.xtype =165 then 'case when '+a.name+' is null then ''null'' else '+'convert(varchar('+convert(varchar(4),a.length*2+2)+'),'+a.name +')'+' end'

when a.xtype =167 then 'case when '+a.name+' is null then ''null'' else '+'''''''''+'+'replace('+a.name+','''''''','''''''''''')' + '+'''''''''+' end'

else '''null'''

end as col,a.colid,a.name

from syscolumns a where a.id = object_id(@tablename) and a.xtype <>189 and a.xtype <>34 and a.xtype <>35 and a.xtype <>36

and columnproperty( a.id,a.name,'isidentity') <> 1)t order by colid

select @sqlstr=@sqlstr+left(@sqlstr2,len(@sqlstr2)-1)+') '+left(@sqlstr1,len(@sqlstr1)-4)+')'' from '+@tablename + ' ' + @wherestr

exec( @sqlstr)

set nocount off

endgo

-- 呼叫

--exec proc_insert '表名' 

根據表中資料生成insert語句的儲存過程

有個缺點 就是標識種子的列 也insert了 create proc spgeninsertsql tablename varchar 256 asbegin declare sql varchar 8000 declare sqlvalues varchar 8000 set sql set sq...

將表中的資料生成INSERT語句

create procedure dbo outputdata tablename varchar 100 表名 asdeclare isidentity int declare columnname varchar 100 列名 declare typename varchar 100 資料型別 ...

SQLServer 匯出資料insert語句

set nocount on 表名和查詢條件 declare tablename varchar 64 c varchar 512 set tablename ba roleauthority set c where 1 1 定義欄位名,型別和長度的變數,以及獲取表結構的游標 declare nam...