sql 跨库查询的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 跨库查询的问题相关的知识,希望对你有一定的参考价值。
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','192.168.1.1'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','sasa'
执行完上面的语句后 我调用
192.168.1.1 这IP电脑里面的数据库User里面的表A
select * from srv_lnk.User.dbo.A
可是 报错
链接服务器"srv_lnk"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "登录超时已过期"。
链接服务器"srv_lnk"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "建立到服务器的连接时发生错误。连接到 SQL Server 2005 时,默认设置 SQL Server 不允许远程连接这个事实可能会导致失败。"。
消息 1231,级别 16,状态 1,第 0 行
命名管道提供程序: 无法打开与 SQL Server 的连接 [1231]
你在SSMS上用SA连接一下192.168.1.1看可以不可连接得上追问
sa的密码是填写的 192.168.1.1的
追答在SSMS上用SA连接一下192.168.1.1看可不可以连接得上
参考技术B 你看看你的数据库配置,tcp/ip协议是否开启,默认应该是关闭的追问已经开启了啊 外围应用配置器里面选的是使用TCP/IP连接的
追答Named Pipes管道服务协议呢
追问嗯 选着的是使用TCP/IP和Named Pipes这个
追答我是说SQL Server Configuration Manager中的配置是否开启,不是外围那个
重新开启的话要重启sql服务器,如果还不行就试着在防火墙中添加sqlserver
例外
SQL 使用openquery进行跨库操作
摘自:http://www.cnblogs.com/aji88/archive/2009/11/06/1597263.html
对给定的链接服务器执行指定的传递查询。该服务器是 OLE DB 数据源。OPENQUERY 可以在查询的 FROM 子句中引用,就好象它是一个表名。OPENQUERY 也可以作为 INSERT、UPDATE 或 DELETE 语句的目标表进行引用。但这要取决于 OLE DB 访问接口的功能。尽管查询可能返回多个结果集,但是 OPENQUERY 只返回第一个。
Transact-SQL 语法约定
语法
OPENQUERY ( linked_server ,\'query\' )
参数
http://ddue.schemas.microsoft.com/authoring/2003/5 NS = "http://ddue.schemas.microsoft.com/authoring/2003/5"
- linked_server
-
表示链接服务器名称的标识符。
- \' query \'
-
在链接服务器中执行的查询字符串。该字符串的最大长度为 8 KB。
备注
OPENQUERY 不接受其参数的变量。
在 SQL Server 2000 和更高版本中,OPENQUERY 不能用于对链接服务器执行扩展存储过程。但是,通过使用四部分名称,可以在链接服务器上执行扩展存储过程。例如:
EXEC SeattleSales.master.dbo.xp_msver
权限
任何用户都可以执行 OPENQUERY。用于连接到远程服务器的权限是从为链接服务器定义的设置中获取的。
示例
A. 执行 SELECT 传递查询
以下示例将使用“用于 Oracle 的 Microsoft 访问接口”针对 Oracle 数据库创建一个名为 OracleSvr
的链接服务器。然后,该示例针对此链接服务器使用 SELECT
传递查询。
注意:
本示例假定已经创建了一个名为 ORCLDB
的 Oracle 数据库别名。
EXEC sp_addlinkedserver \'OracleSvr\',
\'Oracle 7.3\',
\'MSDAORA\',
\'ORCLDB\'
GO
SELECT *
FROM OPENQUERY(OracleSvr, \'SELECT name, id FROM joe.titles\')
GO
B. 执行 UPDATE 传递查询
以下示例针对示例 A 中创建的链接服务器使用 UPDATE
传递查询。
UPDATE OPENQUERY (OracleSvr, \'SELECT name FROM joe.titles WHERE id = 101\')
SET name = \'ADifferentName\';
C. 执行 INSERT 传递查询
以下示例针对示例 A 中创建的链接服务器使用 INSERT
传递查询。
INSERT OPENQUERY (OracleSvr, \'SELECT name FROM joe.titles\')
VALUES (\'NewTitle\');
D. 执行 DELETE 传递查询
以下示例使用 DELETE
传递查询删除示例 C 中插入的行。
DELETE OPENQUERY (OracleSvr, \'SELECT name FROM joe.titles WHERE name = \'\'NewTitle\'\'\');
以上是关于sql 跨库查询的问题的主要内容,如果未能解决你的问题,请参考以下文章