是否有针对链接服务器的“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 的答案几乎相同,我对你们俩都投了赞成票,但给了他支票以包含链接。 ;-) 有趣。sysservers
和 sys.servers
之间有什么区别。我注意到列名不同!
@seebiscuit 第一个是表格,被认为是“旧方式”,第二个是系统视图,这是推荐的方法。 docs.microsoft.com/en-us/sql/relational-databases/system-tables/…以上是关于是否有针对链接服务器的“IF EXISTS”测试?的主要内容,如果未能解决你的问题,请参考以下文章
判断对象是否存在 (if exists (select * from sysobjec...