日期:2014-05-18  浏览次数:20542 次

请教一个数据库表覆盖的问题
远程服务器一台
计算机名:SERVER
IP地址:211.96.9.123
SQL2005端口:1432
数据库名:SAMPLE08
其中某一表名:CUSTOMERS

本地服务器一台
计算机名:LOCALSERVER
数据库名:LOCALSAMPLE08

我想请问下
2个数据库结构一样,我想把远程数据库的CUSTOMERS覆盖至本地SQL2005的LOCALSAMPLE08数据库
应该怎么操作比较合理?





------解决方案--------------------
SQL code

--在本地:
select * into CUSTOMERS from 
openrowset('msdasql','driver={sql server};server=211.96.9.123;uid=用户名;pwd=密码','select * from SAMPLE08..CUSTOMERS')a

------解决方案--------------------
SQL code

上面的是拷贝表结构和表中数据。
如果只拷贝表结构。不拷贝表数据。可以:
select top 0 * into CUSTOMERS from 
openrowset('msdasql','driver={sql server};server=211.96.9.123;uid=用户名;pwd=密码','select * from SAMPLE08..CUSTOMERS')a

------解决方案--------------------
为什么不用备份-拷贝-恢复
或者 分离-拷贝-附加


------解决方案--------------------
如果只时某几个表同步时,先清空要覆盖的表..
整个数据库同步用备份,在另一台机还原
SQL code
EXEC sp_addlinkedserver 'OracleSvr', 
   'Oracle 7.3', 
   'MSDAORA', 
   'ORCLDB'
GO
insert roy_ta
update roy_ta
set isbn=h_isbn 
FROM OPENQUERY(WX, 'SELECT h_isbn, h_name FROM xybook.dbo.db_product') as a inner join roy_ta on a.h_name=roy_ta.h_name
GO

select * from roy_ta
truncate table  roy_ta

alter table roy_ta add isbn varchar(20)null
/***********************************************************************/
介绍几种连接更新方法:
--创建链接服务器
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
go

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

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

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

--如果只是临时访问,可以直接用openrowset
--查询示例
select * from openrowset('SQLOLEDB'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名)


--导入示例
select * into 表 from openrowset('SQLOLEDB'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名)
select * from openrowset('SQLOLEDB'
,'sql服务器名';'用户名';'密码'
,数据库名.dbo.表名)
openrowset可以用下面两个
OPENDATASOURCE或是openquery