SQL Server 2005用存储过程从服务器中导出数据到本地自己的数据库

时间:2022-04-20 17:58:59

SQL2005里生成sql脚本只是导出了数据库结构,数据不会导出,用导出功能只能导出到服务器上其他的数据库(数据库导出到数据库,目的数据库检测不到我本地PC)

so 只能用存储过程将表中的数据一个一个导出到.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 orcharindex(@objectname,@tablename)=0 --此判断不严密

begin

print 'object not in currentdatabase'

return

end

if OBJECTPROPERTY(@objectId,'IsTable')< > 1 -- 判断对象是否是table

begin

print 'The object is not table'

return

end

select@ident=status&0x80 from syscolumns whereid=@objectid and status&0x80=0x80

if @ident is not null

print 'SET IDENTITY_INSERT'+@TableName+' ON'

declare syscolumns_cursor cursor

for select c.name,c.xtype fromsyscolumns c where c.id=@objectid 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 whenlen(@column)=0 then'' else ','end+@name

set @columndata=@columndata+case whenlen(@columndata)=0 then '' else ','','','

end

+case when @xtype in(167,175) then'''''''''+'+@name+'+''''''''' --varchar,char

when @xtype in(231,239) then'''N''''''+'+@name+'+''''''''' --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 '+@tablename+'('+@column+') values(''as''--'','+@columndata+','')'' from '+@tablename

print '--'+@sql

exec(@sql)

if @ident is not null

print 'SET IDENTITY_INSERT'+@TableName+' OFF'

GO

 

使用方法:

exec UspOutputData 你的表名

选择【执行模式】为“以文本显示结果”,然后将运行后的结果存成.sql,加上用SQL Server生成的数据库脚本就可以了。