繁体   English   中英

在存储过程中创建和销毁链接服务器

[英]Create and Destroy Linked Server in Stored Procedure

我有一个存储过程,需要触摸两个不同服务器上的一些数据。 其中一台服务器包含一些敏感信息,我们宁愿不要一直将此服务器链接到另一台服务器。

为了解决这个问题,我编写了将服务器直接链接并销毁到存储过程中的调用,如下所示:

IF NOT EXISTS (
        SELECT NAME
        FROM sys.servers
        WHERE NAME = 'TIMECLOCK'
        )
    EXEC sys.sp_addlinkedserver @server = 'TIMECLOCK'
        ,@srvproduct = 'SQL Server';

/* a select statement */
EXEC sys.sp_dropserver [TIMECLOCK]

然而,有时(但不是所有的时间!),当我运行它,它抛出一个错误告诉我,它无法找到该TIMECLOCK在服务器sys.servers 不一致使我感到困惑,因为我已经尝试了许多场景(在运行过程之前有和没有实例化链接的情况下),它们都大约有70%的时间有效。

知道是什么原因造成的吗?

其中一台服务器包含一些敏感信息,我们宁愿不要一直将此服务器链接到另一台服务器。

垃圾。 如果您确实关心安全性,则应立即加强安全性并加以处理,而不是为一个假想的问题选择最坏的解决方案。

话虽如此,链接服务器还是有其他专门为此目的设计的替代方法-当您必须查询外部数据但又不想创建持久链接时。 这是opendatasourceopenrowset 您可以选择最喜欢的任何一个。

我同意上述罗杰·沃尔夫的观点。

但是,如果必须这样做,则可以将代码括在while循环中。 它效率不高,但是可以保证如果添加链接服务器失败,它将继续尝试访问它。

因此,如果不是NOT EXISTS(),请执行WHILE NOT EXISTS()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM