确定链接服务器的 SQL Server 版本

3

请问有没有人知道如何通过使用TSQL语句确定我的联接服务器上运行的SQL版本?

我在运行SQL2005,我的联接服务器正在运行混合的sql2000、2005和2008版本。

5个回答

13
select * from openquery(MyLinkedServer,'SELECT SERVERPROPERTY(''productversion'')')

工作正常


正确,这个能完美工作。从没想过openquery。谢谢。 - Coentje

5

关于OPENQUERY的一个小问题是,我们不能在服务器和查询中使用除字符串字面量以外的任何内容。

使用EXEC AT,您至少可以为查询使用varchar变量(尽管正确引用这些内容可能有点麻烦),但不能为服务器名称使用:

declare @sql AS varchar(max) = 'SELECT SERVERPROPERTY(''productversion'')' EXEC(@sql) AT MyLinkedServer

我认为这只是解析器限制,而不是设计上的故意限制。


+1 是因为这个答案更加通用,可以在需要时以更加灵活的方式使用。 - Coentje
我已经习惯了使用 openquery,所以从来没有尝试过 EXEC ... AT。这对于调用服务器存储过程和带参数的查询要灵活得多。然而,对于简单的事情,openquery更加直观。 - SWeko
这是最佳解决方案。如果您可以运行OPENQUERY语句,则已在表面区域中允许了特别的远程查询。这是一个重要的安全考虑,而链接服务器可以被明确地控制。 - Eric Higgins
当我在MyLinkedServer上使用exec()时,出现了“服务器'MyLinkedServer'未配置为RPC”的错误,而被接受的答案却可以正常工作。 - EventHorizon

1

您可以使用OPENQUERY通过链接服务器访问@@version。

SET @sql = 'SELECT * FROM OPENQUERY(['+@servername+'],''select @@VERSION'')'


0

你也可以尝试:

exec master..xp_msver

0
SELECT @@VERSION

返回一个字符串,其中详细说明了服务器的版本。

@@Version仅适用于本地服务器,而不适用于链接的服务器。 - Coentje
与SERVERPROPERTY('productversion')相同 - Coentje

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接