用SQL语句复制仓库表生成名为BAK的表文件

发布网友 发布时间:2022-04-24 12:10

我来回答

1个回答

热心网友 时间:2023-10-12 08:56

SQL 不支持对表的直接备份。
--你可以考虑把指定的表以文本文件的形式来进行备份/恢复

if exists(select 1 from sysobjects where name= 'File2Table ' and objectproperty(id, 'IsProcere ')=1)
drop procere File2Table
go

/*--实现数据导入/导出的存储过程

可以实现导入/导出 整个数据库/指定表 到文本文件

/*--调用示例

导出调用示例
--导出指定表,这里指定导出表:地区资料 和 基本信息,文件名前缀为:zj
exec file2table 'zj ', ' ', ' ', 'd:\ ', 'xzkh_sa ', '地区资料,基本信息 '
--导出整个数据库到c:\docman目录下,无文件前缀
exec file2table 'zj ', ' ', ' ', 'd:\txt\ ', 'xzkh_sa '

导入调用示例
--导入指定表,这里指定导出表:地区资料 和 基本信息,文件名前缀为:zj
exec file2table 'zj ', ' ', ' ', 'c:\zj ', 'xzkh_sa ', '地区资料,基本信息 ',0
--导入整个数据库从c:\docman目录下,无文件前缀
exec file2table 'zj ', ' ', ' ', 'C:\docman\ ', 'xzkh_sa ', ' ',0
--*/
create procere File2Table
@servername varchar(200)--服务器名
,@username varchar(200)--用户名,如果用NT验证方式,则为空 ' '
,@password varchar(200)--密码
,@path varchar(1000)--目录名+文件前缀,目录名必须以 '\ '结束,文件名自动用表名.txt
,@dbname varchar(500)--数据库名
,@tbname varchar(8000)= ' '--表名列表,如果不指定,则表示所有用户表
,@isout bit=1--1为导出(默认),0为导入
as
declare @sql varchar(8000),@sql1 varchar(8000)
declare @tbstation int,@filestation int

--初始化数据处理语句
select @sql= 'bcp " '+@dbname+ '.. '
,@tbstation=len(@sql)+1
,@sql=@sql
+case when @isout=1 then ' " out ' else ' " in ' end
+ ' " '+@path
,@filestation=len(@sql)+1
,@sql=@sql
+ '.txt " /c '+ ' /S " '+@servername
+case when isnull(@username, ' ')= ' ' then ' '
else ' " /U " '+@username end
+ ' " /P " '+isnull(@password, ' ')+ ' " '

--数据导入/导出处理
--定义数据处理的游标
set @sql1= 'declare #tb cursor for select name from '
+@dbname+ '..sysobjects where xtype= ' 'U ' ' '
+case when isnull(@tbname, ' ')= ' ' then ' '
else ' and name in ( ' ' '+replace(@tbname, ', ', ' ' ', ' ' ')+ ' ' ') ' end
exec(@sql1)
open #tb
fetch next from #tb into @tbname
while @@fetch_status=0
begin
select @sql1=stuff(@sql,@tbstation,0,@tbname)
,@sql1=stuff(@sql1,@filestation+len(@tbname),0,@tbname)
exec master..xp_cmdshell @sql1,no_output
fetch next from #tb into @tbname
end
close #tb
deallocate #tb
go

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com