是否有针对链接服务器的“IF EXISTS”测试?

Posted

技术标签:

【中文标题】是否有针对链接服务器的“IF EXISTS”测试?【英文标题】:Is there an "IF EXISTS" test for a linked server? 【发布时间】:2010-06-23 17:50:29 【问题描述】:

我希望能够以编程方式(在 T-SQL 中)检查我当前的服务器和数据库是否已经存在特定的链接服务器(这样如果链接还不存在,我可以创建它)。我试过这样的东西:

IF OBJECT_ID('myserver\devdb_1') IS NULL
BEGIN
  PRINT 'Does not exist, need to create link'
  EXEC master.dbo.sp_addlinkedserver @server = N'myserver\devdb_1', 
                                     @srvproduct=N'SQL Server'
END
ELSE
  PRINT 'Link already exists'

但是 OBJECT_ID 测试总是返回 null,即使链接已经存在。有什么方法可以在 T-SQL 中进行此检查,以便我的其余代码可以假定链接始终存在?

【问题讨论】:

【参考方案1】:

签到sys.servers:

if not exists(select * from sys.servers where name = N'myserver\devdb_1')

【讨论】:

+ 和 is_linked = 1【参考方案2】:
IF NOT EXISTS ( SELECT TOP (1) * FROM sysservers WHERE srvname = 'myserver\devdb_1' )

【讨论】:

基本上,与 Remus Rusanu 的答案几乎相同,我对你们俩都投了赞成票,但给了他支票以包含链接。 ;-) 有趣。 sysserverssys.servers 之间有什么区别。我注意到列名不同! @seebiscuit 第一个是表格,被认为是“旧方式”,第二个是系统视图,这是推荐的方法。 docs.microsoft.com/en-us/sql/relational-databases/system-tables/…

以上是关于是否有针对链接服务器的“IF EXISTS”测试?的主要内容,如果未能解决你的问题,请参考以下文章

将 IF EXISTS 移至 WHERE 子句

判断对象是否存在 (if exists (select * from sysobjec...

针对web系统的常用测试方法

UPDATE IF EXISTS 查询

mysql5.7基础 drop database if exists... 删除数据库前判断它是否存在

Oracle中没有 if exists(...)