2009-06-04 14 views

Antwort

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

Works

+0

Richtig, das funktioniert einwandfrei. Niemals an Openquery gedacht. Danke, – Coentje

0
SELECT @@VERSION 

Gibt eine Zeichenfolge, die die Version des Servers Detaillierung.

+0

@@ Version funktioniert nur auf dem lokalen Server, nicht auf dem Verbindungsserver – Coentje

+0

Gleiches gilt für SERVERPROPERTY ('Produktversion') – Coentje

4

Eine kleine nitpick über OPENQUERY ist, dass man nichts anderes als Stringliterale sowohl für den Server und die Abfrage verwenden können.

Mit EXEC AT Sie können zumindest Verwendung varchar Variablen für die Abfrage (obwohl es ein Schmerz sein kann, die Dinge richtig zu zitieren), obwohl nicht für den Server-Name:

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

Ich gehe davon aus, dass dies nur eine Parser-Einschränkung ist und nicht irgendeine bewusste Einschränkung im Design.

+0

+1, weil diese Antwort vielseitiger ist und flexibler verwendet werden kann, wenn sie benötigt wird – Coentje

+0

Ich habe mich so an Openquery gewöhnt, ich habe nie versucht EXEC zu testen ... AT Dies ist viel flexibler zum Aufrufen von Server-Procs und parametrisierten Abfragen. Für einfache Dinge ist OpenQuery jedoch geradliniger. – SWeko

+0

Dies ist die beste Lösung. Sie haben Ad-hoc-Remoteabfragen in Ihrem Oberflächenbereich zugelassen, wenn Sie OPENQUERY-Anweisungen ausführen können. Das ist eine wichtige Sicherheitsüberlegung, während Verbindungsserver explizit gesteuert werden können. –

0

Sie können auch versuchen:

exec master..xp_msver 
0

Sie @@ Version über einen Verbindungsserver OPENQUERY

SET @sql = 'SELECT * FROM OPENQUERY ([' + @ Server + '] zugreifen können, '' select @@ VERSION '')

Verwandte Themen