• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

把远程服务器中一个表的数据备份到本地服务器

zjliujun 2008-03-31 10:43:12
我过一段时间就要把远程SQL服务器中的一个表格的数据备份到当地的SQL中,原来是把当地的同名的表完全删除,然后再用导入的方式,具体说就是选择“从源数据库复制表和视图”的方式重新建立该表,并复制数据。
我现在想用追加的方式,就是不删除当地的SQL中该表了,只是把最新的几条记录追加进来,请问该如何做?
...全文
168 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xuchaofu 2008-03-31
来个简单的,在企业管理器中,在目标数据库上单击右键,选所有任务下的导入数据,然后采用SQL语句定义你所需要导入的数据,根据提示一步一步来就可以了,这方法较为简单!
回复
zjliujun 2008-03-31
还是有错误:

在远程的SQL查询中执行:

exec sp_addlinkedserver @server='me', @srvproduct='',@provider='SQLOLEDB', @datasrc='c:\Program Files\Microsoft SQL Server\MSSQL\data\sq_mysofts_Data.MDF'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sq_mysofts','35436n'
go
insert into Project_Projects select * from me.sq_mysofts.dbo.Project_Projects WHERE ProjID>393

错误是:
服务器: 消息 15247,级别 16,状态 1,过程 sp_addlinkedsrvlogin,行 24
用户没有执行此操作的权限。
服务器: 消息 7202,级别 11,状态 2,行 1
在 sysservers 中未能找到服务器 'me'。请执行 sp_addlinkedserver 以将服务器添加到 sysservers。



回复
dawugui 2008-03-31
[Quote=引用 12 楼 zjliujun 的回复:]
我把本地的服务器的数据追加到远程服务器,出现了错误:

我在SQL查询器中输入:

insert opendatasource('SQLOLEDB', 'Data Source=210.31.54.282;User ID=sq_bizsofts;Password=19678687').sq_bizsofts.dbo.Project_Projects
select * from sq_bizsofts.dbo.Project_Projects WHERE ProjID>393

出现的错误提示是:

服务器: 消息 7314,级别 16,状态 1,行 1
OLE DB 提供程序 'SQLOLEDB' 不包含表 '"sq_bi…
[/Quote]

你远程的权限不够,在远程服务器上建立够权限的用户或使用SA再试试
回复
zjliujun 2008-03-31
我把本地的服务器的数据追加到远程服务器,出现了错误:

我在SQL查询器中输入:

insert opendatasource('SQLOLEDB', 'Data Source=210.31.54.282;User ID=sq_bizsofts;Password=19678687').sq_bizsofts.dbo.Project_Projects
select * from sq_bizsofts.dbo.Project_Projects WHERE ProjID>393

出现的错误提示是:

服务器: 消息 7314,级别 16,状态 1,行 1
OLE DB 提供程序 'SQLOLEDB' 不包含表 '"sq_bizsofts"."dbo"."Project_Projects"'。该表可能不存在,或当前用户没有使用该表的权限。
OLE DB 错误跟踪[Non-interface error: OLE DB provider does not contain the table: ProviderName='SQLOLEDB', TableName='"sq_bizsofts"."dbo"."Project_Projects"']。
回复
zjliujun 2008-03-31
表的名称: Project

结构: ProjID int (主键,自动增加1), ProjName vchar, ProjDesc vchar.
回复
zjliujun 2008-03-31
远程表和本地表是完全一样的,有主键ID的。只是把新的数据追加进来,原来的数据也是一样的。
回复
dawugui 2008-03-31
如果是这样的话,先使用1楼的方法连接数据库.

假设在表中插入今天的数据.
insert into 本地机器名(或IP).本地数据库名.本地用户名.本地表名 select * from 远程机器名(或IP).远程数据库名.远程用户名.远程表名 where convert(varchar(10) ,时间 ,120) = convert(varchar(10), getdate(),120)


假设两表按ID匹配更新,有则改之,无则增之.
update 本地机器名(或IP).本地数据库名.本地用户名.本地表名
set m.col1 = n.col1 ,
m.col2 = n.col2 ,
...
m.coln = n.coln
from 本地机器名(或IP).本地数据库名.本地用户名.本地表名 m,
远程机器名(或IP).远程数据库名.远程用户名.远程表名 n
where m.id = n.id

insert into 本地机器名(或IP).本地数据库名.本地用户名.本地表名 select * from 远程机器名(或IP).远程数据库名.远程用户名.远程表名 where id not in (select id from 本地机器名(或IP).本地数据库名.本地用户名.本地表名)

回复
wzy_love_sly 2008-03-31
[Quote=引用 6 楼 zjliujun 的回复:]
我现在一般是同时用企业管理器连接上远程服务器,也同时打开本地服务器,然后该如何做?
[/Quote]

开查询分析器,
加连接服务器,
按1楼语句写个 insert into ..语句
回复
ojuju10 2008-03-31
作业+脚本解决
回复
zjliujun 2008-03-31
我现在一般是同时用企业管理器连接上远程服务器,也同时打开本地服务器,然后该如何做?
回复
zjliujun 2008-03-31
不用定时更新的,只要告诉我,需要更新时如何操作就可以了
回复
dawugui 2008-03-31
[Quote=引用 2 楼 dawugui 的回复:]
引用楼主 zjliujun 的帖子:
我过一段时间就要把远程SQL服务器中的一个表格的数据备份到当地的SQL中,原来是把当地的同名的表完全删除,然后再用导入的方式,具体说就是选择“从源数据库复制表和视图”的方式重新建立该表,并复制数据。
我现在想用追加的方式,就是不删除当地的SQL中该表了,只是把最新的几条记录追加进来,请问该如何做?

我可以负责任的告诉你,自己用某种开发语言获取需要的数据,然后更新本地SQL SERV…
[/Quote]

具体做法为:
设置一个定时器,设置两个事务,分别连接两个库,然后从远程库中获取数据,和本地库进行比较后更新本地库.
回复
wzy_love_sly 2008-03-31
1楼语句写成过程,加过程在一个作业里,固定间隔时间就执行
回复
dawugui 2008-03-31
[Quote=引用楼主 zjliujun 的帖子:]
我过一段时间就要把远程SQL服务器中的一个表格的数据备份到当地的SQL中,原来是把当地的同名的表完全删除,然后再用导入的方式,具体说就是选择“从源数据库复制表和视图”的方式重新建立该表,并复制数据。
我现在想用追加的方式,就是不删除当地的SQL中该表了,只是把最新的几条记录追加进来,请问该如何做?
[/Quote]
我可以负责任的告诉你,自己用某种开发语言获取需要的数据,然后更新本地SQL SERVER数据库中的表.

这种做法是最好的.
回复
-狙击手- 2008-03-31
--创建链接服务器
exec sp_addlinkedserver 'ITSV','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'ITSV','false',null,'用户名','密码'

--查询示例
select * from ITSV.数据库名.dbo.表名

--导入示例
select * into 表 from ITSV.数据库名.dbo.表名

--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV','droplogins'

--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset

--查询示例
select * from openrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)

--生成本地表
select * into 表 from openrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)

--把本地表导入远程表
insert openrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)
select *from 本地表

--更新本地表
update b
set b.列A=a.列A
from openrowset('SQLOLEDB','sql服务器名';'用户名';'密码',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1

--openquery用法需要创建一个连接

--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV','','SQLOLEDB','远程服务器名或ip地址'
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名') as a
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset
SELECT *
FROM opendatasource('SQLOLEDB', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource('SQLOLEDB', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码').数据库.dbo.表名
select * from 本地表
回复
zjliujun 2008-03-31
我按照xuchaofu 的做了,也提示成功,可以打开表一看,并没有真正地追加数据,怎么回事?
回复
fuda_1985 2008-03-31
mark
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-31 10:43
社区公告
暂无公告