[英]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%的时间有效。
知道是什么原因造成的吗?
其中一台服务器包含一些敏感信息,我们宁愿不要一直将此服务器链接到另一台服务器。
垃圾。 如果您确实关心安全性,则应立即加强安全性并加以处理,而不是为一个假想的问题选择最坏的解决方案。
话虽如此,链接服务器还是有其他专门为此目的设计的替代方法-当您必须查询外部数据但又不想创建持久链接时。 这是opendatasource
和openrowset
。 您可以选择最喜欢的任何一个。
我同意上述罗杰·沃尔夫的观点。
但是,如果必须这样做,则可以将代码括在while循环中。 它效率不高,但是可以保证如果添加链接服务器失败,它将继续尝试访问它。
因此,如果不是NOT EXISTS(),请执行WHILE NOT EXISTS()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.