您的位置:首页 > 数据库

sql2000导出数据库的数据(以insert语句形式的脚本)

2009-09-04 13:52 459 查看
使用 sql2000的查询分析器,将数据库所有表数据提取为 insert 脚本功能,代码如下:

/*************************************************

导出数据库的数据,以insert语句形式存储.

使用方法:

1.设置sql查询分析器

打开SQL 查询分析器,菜单 "工具"-->"选项..." 然后在对话框中选择 "结果"面板,

修改 "每列最多字符数" 为 8000

2.用sql查询分析器打开此文档,选择要导出的的数据库,选择“文本显示结果( Ctrl + T )",执行.

3.返回结果即是选定数据库的相应数据,并且针对每个表的插入前作了暂停约束(触发器等)和插入后恢复约束的设置

longxu 2006-2

--------------------------------

060302a 添加功能,过滤掉没有数据的表

060418a 添加功能: 增加过滤条件参数

061130a 过滤掉 dtproperties 表

***************************************************/

if exists (select * from [dbo].sysobjects where id = object_id(N'[dbo].[GetFieldValue]') and xtype in (N'FN', N'IF', N'TF'))

drop function [dbo].[GetFieldValue]

Go

/*

输入列名和值,通过检查列的类型,将输入的值转为特定的字串

Longxu , 2006-02-20

*/

create function GetFieldValue( @ObjID int ,@fieldName as sysname,@invalue as sql_variant )

returns nvarchar(4000)

as

begin

declare @needque as bit,@xtype as tinyint,@typeName sysname,@Value as nvarchar(4000)

set @needque=0

if @invalue is null return 'NULL'

set @Value=convert(nvarchar(4000),@invalue)

select @xtype=xtype from syscolumns where id=@objID and name=@fieldName

select @typeName=name from systypes where xtype=@xtype

if (@typeName='datetime' or

@typeName='smalldatetime' )

begin

set @Value=''''+convert(varchar(20),@invalue,120)+''''

end

if (@typeName='nvarchar' or

@typeName='varchar' or

@typeName='char' or

@typeName='sysname' or

@typeName='nchar' or

@typeName='ntext' or

@typeName='text' )

begin

set @Value=replace(@Value,'''','''''')

set @Value=''''+@value+''''

end

return @Value

end

go

if exists (select * from [dbo].sysobjects where [id] = object_id(N'[dbo].[GetInsertStringFromTable]') and OBJECTPROPERTY([id], N'IsProcedure') = 1 )

drop procedure [dbo].[GetInsertStringFromTable]

Go

/*

输入表的 ID ,将整个表的数据转换为 insert 语名

Longxu , 2006-02-20,2006-02-21

*/

create procedure GetInsertStringFromTable @ObjID int ,@FilterStr nvarchar(4000) = ''

as

begin

declare @columnsStr as nvarchar(4000)

declare @valuesStr as nvarchar(4000)

declare @fieldname as sysname

set @columnsStr=''

set @valuesStr=''

if object_id('dtproperties')=@ObjID return

DECLARE columns_cursor CURSOR FOR

SELECT name

FROM syscolumns

WHERE [id] = @ObjID --and status<>0x80

OPEN columns_cursor

FETCH NEXT FROM columns_cursor

INTO @fieldname

WHILE @@FETCH_STATUS = 0

BEGIN

set @columnsStr=@columnsStr+',['+@fieldname+']'

set @valuesStr=@valuesStr+'+'',''+'+'dbo.GetFieldValue('+ltrim(STR(@ObjID))+','''+@fieldname+''',['+@fieldname+']) '

FETCH NEXT FROM columns_cursor

INTO @fieldname

END

CLOSE columns_cursor

DEALLOCATE columns_cursor

if @columnsStr<>''

begin

set @columnsStr=substring(@columnsStr,2,len(@columnsStr)-1)

set @valuesStr=substring(@valuesStr,len('+'',''+')+1,len(@valuesStr)-len('+'',''+'))

end

declare @sql as Nvarchar(4000)

declare @headerStr Nvarchar(4000)

set @headerStr='[--'+object_name(@ObjID)+convert(varchar(20),getdate(),120)+']'

set @sql='if exists(Select top 1 * from ['+object_name(@ObjID)+'] '

IF @FilterStr<>'' and not (@FilterStr is null ) set @sql= @sql+' Where '+@FilterStr

set @sql= @sql+' )'

set @sql=@sql+'select '+@headerStr+' from ( '

set @sql=@sql+'Select 0 as a,''ALTER TABLE ['+object_name(@ObjID)+'] NOCHECK CONSTRAINT All --暂停约束'' as '+@headerStr+' union '

set @sql=@sql+'Select 1 as a,''ALTER TABLE ['+object_name(@ObjID)+'] DISABLE TRIGGER ALL --暂停触发器'' as '+@headerStr+' union '

if exists(SELECT name FROM syscolumns WHERE [id] = @ObjID and status=0x80)

begin

set @sql=@sql+'Select 2, ''Set IDENTITY_INSERT ['+object_name(@ObjID)+'] ON --暂停标识列'' union '

end

set @sql=@sql+' Select 3, '

set @sql= @sql+'''insert into [' + object_name(@ObjID)+'] ('+@columnsStr+' ) values('' + '+@valuesStr+' +'')'' '

set @sql= @sql+' from ['+object_name(@ObjID)+'] '+char(13)

IF @FilterStr<>'' and not (@FilterStr is null ) set @sql= @sql+' Where '+@FilterStr

if exists(SELECT name FROM syscolumns WHERE [id] = @ObjID and status=0x80)

begin

set @sql=@sql+' union Select 4, ''Set IDENTITY_INSERT ['+object_name(@ObjID)+'] OFF --恢复标识列'' '

end

set @sql=@sql+' union Select 5,''ALTER TABLE ['+object_name(@ObjID)+'] ENABLE TRIGGER ALL --恢复触发器 '' '

set @sql=@sql+' union Select 6,''ALTER TABLE ['+object_name(@ObjID)+'] CHECK CONSTRAINT All --恢复约束 '' '

set @sql=@sql+' ) as a order by a '

-- print '-----begin insert data into table '+object_name(@ObjID)

exec sp_executesql @sql

-- print '-----end insert data into table '+object_name(@ObjID)

end

go

if exists (select * from [dbo].sysobjects where [id] = object_id(N'[dbo].[GetInsertStringFromCurrentDB]') and OBJECTPROPERTY([id], N'IsProcedure') = 1 )

drop procedure [dbo].[GetInsertStringFromCurrentDB]

Go

/*

将当前数据库所有数据,转换成 insert 语句

longxu, 2006-02-20

*/

create procedure GetInsertStringFromCurrentDB @globalFilterStr nvarchar(4000)=''

as

begin

set nocount on

print'/*****************************************************'

print' 数据库数据初始化脚本 '

print' '

print' 数据库名 : '+db_name()

print' 版本   : '

print' 内容   : 系统初始化数据'

print' 创建时间 : '+ convert(varchar(20),getdate(),120)

print' 创建主机 : '+host_name()

print' '

print' 过滤条件 : '+@globalFilterStr

print'*****************************************************/'

print' '

select

case

when objectproperty(id , N'ExecIsFirstDeleteTrigger')=1 then

'--将 '+name+ '指定为相应表的第一个DELETE触发器 '+char(13)+char(10)+

'EXEC sp_settriggerorder @triggername= '''+name+''', @order=''first'', @stmttype = ''DELETE'' '

when objectproperty(id , N'ExecIsFirstInsertTrigger')=1 then

'--将 '+name+ '指定为相应表的第一个INSERT触发器 '+char(13)+char(10)+

'EXEC sp_settriggerorder @triggername= '''+name+''', @order=''first'', @stmttype = ''INSERT'' '

when objectproperty(id , N'ExecIsFirstUpdateTrigger')=1 then

'--将 '+name+ '指定为相应表的第一个UPDATE触发器 '+char(13)+char(10)+

'EXEC sp_settriggerorder @triggername= '''+name+''', @order=''first'', @stmttype = ''UPDATE'' '

when objectproperty(id , N'ExecIsLastDeleteTrigger')=1 then

'--将 '+name+ '指定为相应表的最后一个DELETE触发器 '+char(13)+char(10)+

'EXEC sp_settriggerorder @triggername= '''+name+''', @order=''Last'', @stmttype = ''DELETE'' '

when objectproperty(id , N'ExecIsLastInsertTrigger')=1 then

'--将 '+name+ '指定为相应表的最后一个INSERT触发器 '+char(13)+char(10)+

'EXEC sp_settriggerorder @triggername= '''+name+''', @order=''Last'', @stmttype = ''INSERT'' '

when objectproperty(id , N'ExecIsLastUpdateTrigger')=1 then

'--将 '+name+ '指定为相应表的最后一个UPDATE触发器 '+char(13)+char(10)+

'EXEC sp_settriggerorder @triggername= '''+name+''', @order=''Last'', @stmttype = ''UPDATE'' '

end+char(13)+char(10)+'GO' as [--添中触发器顺序]

from sysobjects

where

objectproperty(id , N'ExecIsFirstDeleteTrigger')=1 or

objectproperty(id , N'ExecIsFirstInsertTrigger')=1 or

objectproperty(id , N'ExecIsFirstUpdateTrigger')=1 or

objectproperty(id , N'ExecIsLastDeleteTrigger')=1 or

objectproperty(id , N'ExecIsLastInsertTrigger')=1 or

objectproperty(id , N'ExecIsLastUpdateTrigger')=1

IF @globalFilterStr<>'' set @globalFilterStr=Replace(@globalFilterStr,'''','''''')

declare @sql varchar(1000)

set @sql='declare @objid int declare @filterStr nvarchar(4000) '

set @sql=@sql+'set @objid=object_id(''?'') '

IF @globalFilterStr<>'' set @sql=@sql+'set @filterStr='''+@globalFilterStr+''' '

set @sql=@sql+'exec GetInsertStringFromTable @objid, @filterStr '

exec sp_MSForeachtable

@command1=@sql

end

Go

-------------------------------------------------------------------------

--使用方法如下:

--如以下功能不够用,请按例子扩展功能

-------------------------------------------------------------------------

--1. 将所有的表 ,控制列为 "BC" 的数据导出

exec GetInsertStringFromCurrentDB --@globalFilterStr='控制=''BC'' '

Go

--2. 将所有的表 ,状态列非 "系统保留" 的数据导出

--exec GetInsertStringFromCurrentDB @globalFilterStr='状态<>''系统保留'' '

Go

--3. 将指定的表,状态列为 "系统保留" 的数据导出

/*

declare @objid int

set @objid=object_id('物料')

exec GetInsertStringFromTable @objid=@objid, @FilterStr=' 状态=''系统保留'' '

*/

go

--4. 将指定的表,状态列非 "系统保留" 的数据导出

/*

declare @objid int

set @objid=object_id('物料')

exec GetInsertStringFromTable @objid=@objid, @FilterStr=' 状态<>''系统保留'' '

*/

go

------------------------------------------------------------------------------------------------------------

if exists (select * from [dbo].sysobjects where [id] = object_id(N'[dbo].[GetInsertStringFromCurrentDB]') and OBJECTPROPERTY([id], N'IsProcedure') = 1 )

drop procedure [dbo].[GetInsertStringFromCurrentDB]

Go

if exists (select * from [dbo].sysobjects where [id] = object_id(N'[dbo].[GetInsertStringFromTable]') and OBJECTPROPERTY([id], N'IsProcedure') = 1 )

drop procedure [dbo].[GetInsertStringFromTable]

Go

if exists (select * from [dbo].sysobjects where id = object_id(N'[dbo].[GetFieldValue]') and xtype in (N'FN', N'IF', N'TF'))

drop function [dbo].[GetFieldValue]

Go

导出的脚本格式如下:

/*****************************************************

数据库数据初始化脚本

数据库名 : pubs

版本   : 

内容   : 系统初始化数据

创建时间 : 2009-09-04 13:59:21

创建主机 : HS-WE

过滤条件 : 

*****************************************************/

--添中触发器顺序

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--titleauthor2009-09-04 13:59:21

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ALTER TABLE [titleauthor] NOCHECK CONSTRAINT All --暂停约束

ALTER TABLE [titleauthor] DISABLE TRIGGER ALL --暂停触发器

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('172-32-1176','PS3333',1,100)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('213-46-8915','BU1032',2,40)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('213-46-8915','BU2075',1,100)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('238-95-7766','PC1035',1,100)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('267-41-2394','BU1111',2,40)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('267-41-2394','TC7777',2,30)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('274-80-9391','BU7832',1,100)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('409-56-7008','BU1032',1,60)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('427-17-2319','PC8888',1,50)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('472-27-2349','TC7777',3,30)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('486-29-1786','PC9999',1,100)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('486-29-1786','PS7777',1,100)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('648-92-1872','TC4203',1,100)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('672-71-3249','TC7777',1,40)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('712-45-1867','MC2222',1,100)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('722-51-5454','MC3021',1,75)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('724-80-9391','BU1111',1,60)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('724-80-9391','PS1372',2,25)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('756-30-7391','PS1372',1,75)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('807-91-6654','TC3218',1,100)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('846-92-7186','PC8888',2,50)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('899-46-2035','MC3021',2,25)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('899-46-2035','PS2091',2,50)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('998-72-3567','PS2091',1,50)

insert into [titleauthor] ([au_id],[title_id],[au_ord],[royaltyper] ) values('998-72-3567','PS2106',1,100)

ALTER TABLE [titleauthor] ENABLE TRIGGER ALL --恢复触发器

ALTER TABLE [titleauthor] CHECK CONSTRAINT All --恢复约束

--stores2009-09-04 13:59:21

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ALTER TABLE [stores] NOCHECK CONSTRAINT All --暂停约束

ALTER TABLE [stores] DISABLE TRIGGER ALL --暂停触发器

insert into [stores] ([stor_id],[stor_name],[stor_address],[city],[state],[zip] ) values(6380,'Eric the Read Books','788 Catamaugus Ave.','Seattle',WA,98056)

insert into [stores] ([stor_id],[stor_name],[stor_address],[city],[state],[zip] ) values(7066,'Barnum''s','567 Pasadena Ave.','Tustin',CA,92789)

insert into [stores] ([stor_id],[stor_name],[stor_address],[city],[state],[zip] ) values(7067,'News & Brews','577 First St.','Los Gatos',CA,96745)

insert into [stores] ([stor_id],[stor_name],[stor_address],[city],[state],[zip] ) values(7131,'Doc-U-Mat: Quality Laundry and Books','24-A Avogadro Way','Remulade',WA,98014)

insert into [stores] ([stor_id],[stor_name],[stor_address],[city],[state],[zip] ) values(7896,'Fricative Bookshop','89 Madison St.','Fremont',CA,90019)

insert into [stores] ([stor_id],[stor_name],[stor_address],[city],[state],[zip] ) values(8042,'Bookbeat','679 Carson St.','Portland',OR,89076)

ALTER TABLE [stores] ENABLE TRIGGER ALL --恢复触发器

ALTER TABLE [stores] CHECK CONSTRAINT All --恢复约束
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: