现在有两个服务器A和B,都有相同的表T,现在要将服务器A中T表的数据,用SQL语句全部增加到服务器B中的T表中去,用一条SQL语句,可否实现?请大家帮忙!
解决方案 »
- 这样的循环如何写?
- 组件为什么装不上去?
- DELPHI中写好了属性怎么再对象观察器里面看不到呢????请哪位高手帮帮我.
- 谢谢女友与我一起渡过中秋,祝其一路顺风
- 怎样不重复创建childform
- 急问---请问有什么合适的Grid,能实现单独控制某列的读写性?
- 救命啊!,为什么动态创建的adoquery组件加上动态创建固定字段free时会内存地址只读出错?
- 如何得知只读文件是否被其它程序在使用?
- 文件分发程序
- 开发一个系统求帮助
- 刚刚开始学习Delphi,谁介绍几本好书,最好有下载地址?将来想做工控方面的,这方面的也提供一些,先谢谢了
- cxGrid如何实现多一列,可以用来进行多选行。等于多一列CHECKBOX来实现按CTRL选择多行的效果
insert into B.dbo.T select * from A.dbo.T
如果不相同则
insert into B.dbo.T(字段1,字段2......) select 字段1,字段2,..... from A.dbo.T
adoquery1连接adoconnection1
adoquery1执行下面的sqlinsert into T select *
FROM OPENDATASOURCE(
'SQLOLEDB',
'Data Source=B;User ID=sa;Password=B的密码'
).B的库.dbo.T
指定B的密码,B的库名
Ok, lets go step by step. We're going to use Transact SQL language to do this, so go to the Query Analyzer and login to the Local Server (ServerA). First Link the ServerB to ServerA:sp_addlinkedserver 'ServerB', 'SQL Server'Then establish the user that we'll use to connect from ServerA to ServerB. For that task we'll use a valid account in ServerA (with the appropriate permissions) and map it to a valid account in ServerB. That account must have permission to access the source table for the view in ServerA:sp_addlinkedsrvlogin
@rmtsrvname = 'ServerB',
@useself = 'false',
@locallogin = 'YourLocalUserFromA',
@rmtuser = 'YourRemoteUserFromB',
@rmtpassword = 'PasswordOf_rmtuser'Login to ServerA with the account that we mapped to ServerB and create the view:CREATE VIEW dbo.MyView
AS
SELECT Field1, Field2, FieldN
FROM ServerB.RemoteDB.dbo.RemoteTable
GOStart using it, and good luck:SELECT * FROM MyView
数据库服务器的表中。通常我们会使用这种方法:先把一个数据库中的数据取出来放到某出,然后再把这
些数据一条条插入到目的数据库中,这种方法效率较低,写起程序来也很繁琐,容易出错。另外一种方法
是使用bcp或BULK INSERT语句,将数据导入到一个文件中,再从此文件中导出到目的数据库,这种方法虽
然效率稍高,但也有很多不如意的地方,单是在导入时怎样找到另外一台机器上的数据导入文件就很麻烦。
最方便的一种方法,我想也是效率最高的方法,应该是这样:
比如有两个数据库服务器:zl和ljw,里面都有一个数据库taxitemp(也可以不同名),数据库里有一个表,
叫users,我们现在想把zl中的users数据导入到ljw中,可以这样写sql语句(假设现在连接的是zl数据库):
insert into ljw.taxitemp.dbo.users
select * from users
这样,通过一条sql语句就完成了不同数据库服务器之间的数据复制。
有人会说,这种sql语句我也会写,我也想到了,但是没办法执行。
的确,单纯的这样一条语句没办法执行,因为数据库不知道ljw是什么服务器,也不知道怎样登录,当然会
报错。我们可以这样解决注册远程数据库服务器和登录的问题:
注册远程数据库服务器:
EXEC sp_addlinkedserver 'ljw', N'SQL Server'
注册远程数据库服务器的登录方法:
EXEC sp_addlinkedsrvlogin 'ljw', 'false', NULL, 'sa', 'zz'
至于这两个存储过程的详细用法,我就不多讲了,大家看看帮助就明白了。只要我们先执行远程数据库服务器注册和登录方法注册,然后就可以把远程数据库当成本地数据库使用了。
insert into t select * from B.dbl.t where not exists (select * from t)
insert into TableNameA
select *
from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=ServerNameB;User ID=YourUserID;Password=YourPassword'
).DatabaseNameB.dbo.TableNameB这条语句将服务器ServerNameB下的数据库DatabaseB中的表TableNameB中的数据追加到当前服务器ServerNameA下的数据库DatabaseNameA中的表TableNameA中去。
insert into B.dbo.T select * from A.dbo.T
如果不相同则
insert into B.dbo.T(字段1,字段2......) select 字段1,字段2,..... from A.dbo.T就是这样!!