200分求教一个挑战性问题、将其他计算机中SQL Server 的一个表插入到当前计算机中SQL Server的表中(200)

  • 主题发起人 主题发起人 bx59830
  • 开始时间 开始时间
B

bx59830

Unregistered / Unconfirmed
GUEST, unregistred user!
挑战性问题、将其他计算机中SQL Server 的一个表插入到当前计算机中SQL Server的表中详情: 其他计算机中装有SQL Server服务,本机中也装着SQL Server服务.问题: 将其他计算机中SQL Server 一个表的指定数据插入或导入本机中SQL Server的指定表中(要保留原有数据)。 操作成功后删除其他计算机中SQL Server表中的指定数据。在使用以下方法时只能操作同一个数据库中的表,是不是我的方法不对,请高手教我。 INSERT INTO yonghb(排序编号,姓名,项目名称,数量,单价,金额,日期) SELECT 排序编号,姓名,项目名称,数量,单价,金额,日期 FROM dayb拒绝使用以下方法: 1.循环整个表,逐个添加(时间太长无法忍受)。 2.ADOQuery1.SaveToFile(); ADOQuery1.LoadFromFile(); (要在本地生成一个很大的文件,在导入时可能会覆盖原有数据)
 
在使用以下方法时只能操作同一个数据库中的表,是不是我的方法不对,请高手教我。 INSERT INTO yonghb(排序编号,姓名,项目名称,数量,单价,金额,日期) SELECT 排序编号,姓名,项目名称,数量,单价,金额,日期 FROM dayb使用OPENROWSET.例:SELECT a.*FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;', 'SELECT GroupName, Name, DepartmentID FROM AdventureWorks.HumanResources.Department ORDER BY GroupName, Name') AS a;
 
使用OPENROWSET.例:SELECT a.*FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;', 'SELECT GroupName, Name, DepartmentID FROM AdventureWorks.HumanResources.Department ORDER BY GroupName, Name') AS a; 不解,如何将其他计算机中SQL Server 的一个表插入到当前计算机中SQL Server的表中假如其他计算机中的数据库为AB表为AA,当前计算机中的数据库名为AB1表为AA1,如何操作。
 
查看SQL帮助,OPENROWSET
 
你可以在本机SQL Server中加入一个伺服器连接到其它机的SQL Server! 这样就可以在本机SQL 中访问对方的数据了INSERT INTO yonghb(排序编号,姓名,项目名称,数量,单价,金额,日期) SELECT 排序编号,姓名,项目名称,数量,单价,金额,日期 FROM [SQL服务器名或IP].[数据库名].[dbo].[dayb]
 
假设你的两个表结构一样(字段数量和顺序相同,类型兼容),并且两个表所有者都是dboINSERT INTO AB.dbo.AASELECT *FROM OPENROWSET('SQLOLEDB','远程主机名或IP地址';'用户名';'密码', 'SELECT * FROM AB1.dbo.AA1') AS A
 
TQuery可以跨数据库关联查询,将TQuery.DataBaseName='',界面上2个TDatabase,分别连接2个数据库,DatabaseName分别为Databasename1,DatabaseName2,SQL设置为如下内容Insert into ":DatabaseName2:表2"Select * from ":DatabaseName1:表2"
 
参考各位朋友的方法编写的代码没有执行成功,以下是我的代码、Var WenJianM:String;begin (*========== 将服务器中的数据插入到本机表中 =========*) 两个表的结构完全相同 WenJianM := 'NSERT INTO 销售库(销售编号,条码号,名称)'; WenJianM := ' SELECT a.销售编号,a.条码号,名称 FROM OPENROWSET('+#39+'SQLOLEDB'+#39+','; WenJianM := WenJianM+#39+'192.168.1.221'+#39+';'; //服务器IP地址 WenJianM := WenJianM+#39+'XX33110'+#39+';'+#39+'531667-530'+#39+','; //户名及密码 WenJianM := WenJianM+#39+'SELECT 销售编号,条码号,名称 FROM xtxy.dbo.销售库'+#39+') AS A'; ADOBenJi.Close; //ADOBenJi(ADOQuery组件)与本机数据库已经建立连接 ADOBenJi.SQL.Clear; ADOBenJi.SQL.Add(WenJianM); ADOBenJi.ExecSQL; ShowMessage('操作完成');end; 执行以上操作后本机表 销售库 没有任何数据( 服务器上销售库表中的数据有两万多条)。 但是执行以下操作能返回服务器上销售库表中的数据 Var WenJianM:String;begin (*========== 将服务器中的数据插入到本机表中 =========*) 两个表的结构完全相同 WenJianM := 'SELECT a.销售编号,a.条码号,名称 FROM OPENROWSET('+#39+'SQLOLEDB'+#39+','; WenJianM := WenJianM+#39+'192.168.1.221'+#39+';'; //服务器IP地址 WenJianM := WenJianM+#39+'XX33110'+#39+';'+#39+'531667-530'+#39+','; //户名及密码 WenJianM := WenJianM+#39+'SELECT 销售编号,条码号,名称 FROM xtxy.dbo.销售库'+#39+') AS A'; ADOBenJi.Close; //ADOBenJi(ADOQuery组件)与本机数据库已经建立连接 ADOBenJi.SQL.Clear; ADOBenJi.SQL.Add(WenJianM); ADOBenJi.Open; ShowMessage('操作完成');end; 还请各位朋友给诊诊脉、非常感谢。
 
WenJianM := 'NSERT INTO 销售库(销售编号,条码号,名称)';很显然,少了个I
 
不要弄的那么复杂三,注册远程数据库服务器:EXEC sp_addlinkedserver 'RemoteServer', N'SQL Server' ,'LocalServer'注册远程数据库服务器的登录方法:EXEC sp_addlinkedsrvlogin 'RemoteServer', 'false', Null, 'SqlUser', 'Password'这样就可以把远程服务器当作本机使用了INSERT INTO [RemotServer].远程数据库.dbo.表名(Column1...ColumnN)SELECT Column1...ColumnN FROM 本地数据库
 
或者下边也行Exec sp_addlinkedserver @LocalServer = '127.0.0.1' Exec sp_addlinkedsrvlogin @RemteServer = '192.168.0.133', @UseSelf = false , @LocalLogin = 'sa', @RemoteUser = 'sa' , @remotePassword = nullgo--------------------------------------------------------------------------------------------------- insert into [192.168.0.133].ServerName.dbo.Table1 select * from ServerName.dbo.Table1go-----------------------------------------------------------------------------------------------------drop remote server linkExec sp_droplinkedsrvlogin @RemoteServer = '192.168.0.133', @LocalLogin = 'sa' execute sp_dropserver @RemoteServer = '192.168.0.133'go
 
写一个DTS就好了啊
 
如果是我,我可能会写个存储过程来实现。。存储过程效率也高涉及到的就只是一个跨数据库查询,插入,删除而已
 
问题解决了,感谢大富翁、感谢各位富友。结贴。以下代码进行一下修改即可: (*========== 将服务器中的数据插入到本机表中 =========*) 两个表的结构完全相同 WenJianM := 'NSERT INTO 销售库(销售编号,条码号,名称)'; WenJianM := ' SELECT a.销售编号,a.条码号,名称 FROM OPENROWSET('+#39+'SQLOLEDB'+#39+','; 改为以下代码 (*========== 将服务器中的数据插入到本机表中 =========*) 两个表的结构完全相同 WenJianM := 'INSERT INTO 销售库(销售编号,条码号,名称)'; WenJianM := WenJianM+' SELECT a.销售编号,a.条码号,名称 FROM OPENROWSET('+#39+'SQLOLEDB'+#39+',';
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部