?????遇到奇怪现象:远程连接找不到。
明明已经连接远程DB了,但是总是提示[在sys.servers里找不到远程DB连接SUBLNK]。
但是如果把[第一段 开始]~[第一段 结束]的代码屏蔽掉的话,则可以顺利执行。
为什么加了第一段就不行了。
---------------第一段 开始---------------------------------------------------
USE [ABCDB]
GO
IF (EXISTS (SELECT * FROM SYS.OBJECTS WHERE NAME = 'SP_COPYDATAFROMSUBDB'))
DROP PROCEDURE SP_COPYDATAFROMSUBDB
GO
CREATE PROCEDURE [dbo].[SP_COPYDATAFROMSUBDB]
AS
---------------第一段 结束---------------------------------------------------
---------------------------------远程DB连接---------------------------------
EXEC master.dbo.SP_ADDLINKEDSERVER 'SUBLNK', '','SQLNCLI',N'JCAPP\JCSQLSERVER12R2'
EXEC master.dbo.SP_ADDLINKEDSRVLOGIN 'SUBLNK','false ',NULL, 'sa', 'sa_12345678'
GO
SELECT COUNT(1) FROM SUBLNK.SUBDB.DBO.M_CLIENT WHERE CLIENT_CODE = 'C0101'
EXEC SP_DROPSERVER 'SASLNK ', 'droplogins'
GO
------解决方案-------------------- 距我了解,不行,\这个问题可以用:
[HIAPPSRV\JCSQLSERVER201212_R2]来解决
------解决方案-------------------- 引用: Quote: 引用:
创建linkserver的语句和查询的不能同时放到一个sp里面
就是linkserver 还没有创建呢,但是查询语句还是会去判断一下对象
似乎是这样的逻辑,导致编译出错了
你这样做也米有什么意义,密码岂不是都被看到了
如果只用一次使用的话,直接用openrowset
执行粗略的划分,是两个过程,先生成执行计划,再根据这个计划执行
生成执行计划的时候,你的链接服务器还没有建呢,但
后面用到的链接服务器的对象,在编译期间是要取得一些信息的,
但这个时候因为没有执行,
所以没有链接服务器,所以拿不到信息,自然就出错了
被无视了吗?呵呵
------解决方案-------------------- 既然不能编译通过,何不先创建此链接
然后待创建存储过程后删除该链接
------解决方案-------------------- 引用: 阳泉酒家小当家,多谢热心帮助啊,按照你的试了一下,一样的错误。
Could not find server 'SUBLNK' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.
呵呵,我知道问题在哪儿了:
我做了一个实验:
1.下面的代码报错了
--建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'Link1',
@srvproduct='ms',
@provider=N'SQLNCLI',
&nb