您的位置:首页 > 数据库

SQL Server自动生成INSERT语句

2009-05-01 16:03 507 查看
这是建立一个存储过程,通过执行这个存储过程,将指定的数据表中的数据导成Insert语句形式

--这是一个可以将表中的数据自动生成INSERT语句的存储过程

--有个BUG,如果是自动增长列,数据也会被插入

--在查询分析器中执行完成后,可以从执行结果中自制出SQL脚本。

IF OBJECT_ID('spGenInsertSQL','P') IS NOT NULL

DROP PROC spGenInsertSQL

GO

CREATE proc spGenInsertSQL (@tablename varchar(256))

as

begin

declare @sql varchar(8000)

declare @sqlValues varchar(8000)

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 ='select ''INSERT INTO ['+ @tablename + ']' +
left(@sql,len(@sql)-1)+') ' + left(@sqlValues,len(@sqlValues)-4) + ')''
from '+@tablename

print @sql

exec (@sql)

end

GO

执行如下语句测试结果:

exec spGenInsertSQL test
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息