将表数据生成SQL脚本的存储过程

80酷酷网    80kuku.com

  存储过程|脚本|数据

作者:zlt982001

  将表数据生成SQL脚本的存储过程:

CREATE PROCEDURE dbo.UspOutputData
tablename sysname
AS
declare column varchar(1000)
declare columndata varchar(1000)
declare sql varchar(4000)
declare xtype tinyint
declare name sysname
declare objectId int
declare objectname sysname
declare ident int

set nocount on
set objectId=object_id(tablename)

if objectId is null -- 判斷對象是否存在
begin
print 'The object not exists'
return
end
set objectname=rtrim(object_name(objectId))

if objectname is null or charindex(objectname,tablename)=0 --此判断不严密
begin
print 'object not in current database'
return
end

if OBJECTPROPERTY(objectId,'IsTable') < > 1 -- 判斷對象是否是table
begin
print 'The object is not table'
return
end

select ident=status&0x80 from syscolumns where and status&0x80=0x80

if ident is not null
print 'SET IDENTITY_INSERT ON'

declare syscolumns_cursor cursor

for select c.name,c.xtype from syscolumns c where order by c.colid

open syscolumns_cursor
set column=''
set columndata=''
fetch next from syscolumns_cursor into name,xtype

while fetch_status < >-1
begin
if fetch_status < >-2
begin
if xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext,sql_variant 暂时不处理

begin
set column=column+case when len(column)=0 then'' else ','end+name

set columndata=columndata+case when len(columndata)=0 then '' else ','','','
end

+case when xtype in(167,175) then --varchar,char
when xtype in(231,239) then --nvarchar,nchar
when xtype=61 then '''''''''+convert(char(23),'+name+',121)+''''''''' --datetime
when xtype=58 then '''''''''+convert(char(16),'+name+',120)+''''''''' --smalldatetime
when xtype=36 then '''''''''+convert(char(36),'+name+')+''''''''' --uniqueidentifier
else name end

end

end

fetch next from syscolumns_cursor into name,xtype

end

close syscolumns_cursor
deallocate syscolumns_cursor

set sql='set nocount on select ''insert ) values(''as ''--'','+columndata+','')'' from

print
exec(sql)

if ident is not null
print 'SET IDENTITY_INSERT OFF'

GO

exec UspOutputData 你的表名



分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: