如何实现对两台服务器上的两个数据库的数据访问?

kimpkswm 2012-08-10 10:43:36
一台服务器地址为192.1.1.3,另一台为192.1.1.57;
两台服务器的数据库名称分别为ufdata_333_2012和ufdata_006.2012;
两个数据库中分别有A表和B表.
现在想将A表和B表以某个字段进行连接,怎么实现呢?

按下面的操作进行,但不能实施数据库之间的访问.

--1、在查询编辑器中,输入以下 Transact-SQL 命令以便链接到名为 SRVR002\ACCTG 的 SQL Server 实例:
USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'192.1.1.57\ufdata_006_2012',@srvproduct=N'SQL Server';
GO

--2、执行以下代码,以便将链接服务器配置为使用正在使用链接服务器的登录名的域凭据。
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'192.1.1.57\ufdata_006_2012',@locallogin = NULL ,@useself = N'True' ;
GO

在第2点怎么实现指定的用户和密码来进行访问这个远程服务器呢?

3、执行下面的代码,测试与链接服务器的连接,但提示“SQL Server 不存在或拒绝访问。”的错误信息
SELECT name FROM [192.1.1.57\ufdata_006_2012].master.sys.databases;
GO


上面的操作不知道是哪错了?
在SQL SERVER的企业管理器上的连接服务项,也连接不上服务器
...全文
465 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr_Nice 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:
引用 6 楼 的回复:

引用 1 楼 的回复:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'192.1.1.57\ufdata_006_2012',@locallogin = NULL ,@useself = N'True' ;

运行
SELECT name FROM [192.1.1.57……
[/Quote]

应该是'',不过LZ sa 密码还是最好定义一个,空密码很危险
kimpkswm 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:

引用 1 楼 的回复:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'192.1.1.57\ufdata_006_2012',@locallogin = NULL ,@useself = N'True' ;

运行
SELECT name FROM [192.1.1.57\ufdata_006_201……
[/Quote]

sa用户的密码为空密码,那最后一个参数值是用NULL还是''呢?
Mr_Nice 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 1 楼 的回复:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'192.1.1.57\ufdata_006_2012',@locallogin = NULL ,@useself = N'True' ;

运行
SELECT name FROM [192.1.1.57\ufdata_006_2012].master.sys……
[/Quote]

这个状态时OK的。创建的时候,使用sa用户名及密码

exec sp_addlinkedsrvlogin  '192.1.1.57\ufdata_006_2012 ', 'false ',null, 'sa', '密码' 
go


kimpkswm 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'192.1.1.57\ufdata_006_2012',@locallogin = NULL ,@useself = N'True' ;

运行
SELECT name FROM [192.1.1.57\ufdata_006_2012].master.sys.databases;的用户,……
[/Quote]

Sp_Helpserver语句后,
Name列的值为:192.1.1.57\ufdata_006_2012
NetWork_Name列的值为:192.1.1.57\ufdata_006_2012
Status列的值为:rpc,rpc out,data access,use remote collation
kimpkswm 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'192.1.1.57\ufdata_006_2012',@locallogin = NULL ,@useself = N'True' ;

运行
SELECT name FROM [192.1.1.57\ufdata_006_2012].master.sys.databases;的用户,……
[/Quote]

我想设置这个服务器连接的使用用户为Sa,但还不知道上面的第2点的语句怎么写?
kimpkswm 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'192.1.1.57\ufdata_006_2012',@locallogin = NULL ,@useself = N'True' ;

运行
SELECT name FROM [192.1.1.57\ufdata_006_2012].master.sys.databases;的用户,……
[/Quote]

@optname=N'rpc' 和@optname=N'rpc Out'是什么意思呢?
sxssg 2012-08-10
  • 打赏
  • 举报
回复
上面发错了,不好意思:看这个
*不同服务器数据库之间的数据操作*/

--创建链接服务器
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
--把本地表导入远程表
http://topic.csdn.net/u/20111122/17/08437f7b-ee3f-4bd2-b67f-4a87f3df40fe.html
sxssg 2012-08-10
  • 打赏
  • 举报
回复
--从数据库中导出数据并存到文件中
EXEC master..xp_cmdshell 'bcp 数据库..表名 out c:\temp1.txt -c -q -S"." -U"sa" -P""'

EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN out c:\temp1.txt -c -q -S"." -U"sa" -P""'

--从文件中导入数据到数据库对应表中
EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN in c:\temp1.xls -c -q -S"." -U"sa" -P""'
EXEC master..xp_cmdshell 'bcp CAS2004..HGZ_LIAOJIAN in c:\temp1.txt -c -q -S"." -U"sa" -P""'

如果有提示启用什么的输入以下:

--已测试EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;

--未测试,网上的办法;--启用xp_cmdshell
USE master
GO
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'xp_cmdshell', 1
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'show advanced options', 0
GO
RECONFIGURE WITH OVERRIDE
--关闭xp_cmdshell
USE master
GO
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'xp_cmdshell', 0
GO
RECONFIGURE WITH OVERRIDE
GO
EXEC sp_configure 'show advanced options', 0
GO
RECONFIGURE WITH OVERRIDE
Mr_Nice 2012-08-10
  • 打赏
  • 举报
回复
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'192.1.1.57\ufdata_006_2012',@locallogin = NULL ,@useself = N'True' ;

运行
SELECT name FROM [192.1.1.57\ufdata_006_2012].master.sys.databases;的用户,在192.1.1.57\ufdata_006_2012 上有可以读取master.sys.databases的权限吗?


另外,是否配置192.1.1.57\ufdata_006_2012,下面的rpc

USE [master]
GO
EXEC master.dbo.sp_serveroption @server=N'192.1.1.57', @optname=N'rpc', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'192.1.1.57', @optname=N'rpc out', @optvalue=N'true'
GO
kimpkswm 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:
引用 6 楼 的回复:

引用 1 楼 的回复:
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'192.1.1.57\ufdata_006_2012',@locallogin = NULL ,@useself = N'True' ;

运行
SELECT name FROM [192.1.1.57\u……
[/Quote]

不知道为什么,我用EXEC master.dbo.sp_addlinkedserver @server = N'192.1.1.57',@srvproduct=N'SQL Server'创建的服务器连接,可以在企业管理器的服务器连接里,看到其表和视图(但表和视图只看到一些统计表部分)?
而用EXEC master.dbo.sp_addlinkedserver @server = N'192.1.1.57\ufdata_006_2012',@srvproduct=N'SQL Server'创建的服务器连接,则连表和视图都看不到呢?

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧