Wie kann ich mithilfe eines T-SQL-Skripts den SQL Server-Server und den Instanznamen der aktuellen Verbindung abrufen?
Wie kann ich mithilfe eines T-SQL-Skripts den SQL Server-Server und den Instanznamen der aktuellen Verbindung abrufen?
Antworten:
Ich habe gerade die Antwort in dieser SO-Frage gefunden (buchstäblich innerhalb der Frage, keine Antwort):
SELECT @@servername
Gibt Servername \ Instanz zurück, sofern dies nicht die Standardinstanz ist
SELECT @@servicename
Gibt den Instanznamen zurück, auch wenn dies der Standard ist (MSSQLSERVER).
Wie wäre es damit:
EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
@value_name='MSSQLSERVER'
Dadurch wird auch der Instanzname abgerufen. null
bedeutet Standardinstanz:
SELECT SERVERPROPERTY ('InstanceName')
SELECT @@servername
gibt Ihnen Daten als server/instanceName
Um nur die zu erhalten instanceName
, sollten Sie die select @@ServiceName
Abfrage ausführen .
Ich habe das gefunden:
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
@value_name = 'InstalledInstances'
Dadurch erhalten Sie eine Liste aller auf Ihrem Server installierten Instanzen.
Die
ServerName
Eigenschaft derSERVERPROPERTY
Funktion und@@SERVERNAME
geben ähnliche Informationen zurück. DieServerName
Eigenschaft gibt den Windows-Server und den Instanznamen an, die zusammen die eindeutige Serverinstanz bilden.@@SERVERNAME
Gibt den aktuell konfigurierten lokalen Servernamen an.
Ein Microsoft-Beispiel für den aktuellen Server lautet:
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
Dieses Szenario ist nützlich, wenn auf einem Windows-Server mehrere Instanzen von SQL Server installiert sind und der Client eine andere Verbindung zu derselben Instanz öffnen muss, die von der aktuellen Verbindung verwendet wird.
Warum nur beim Instanznamen anhalten? Sie können Ihre SQL Server-Umgebung folgendermaßen inventarisieren:
SELECT
SERVERPROPERTY('ServerName') AS ServerName,
SERVERPROPERTY('MachineName') AS MachineName,
CASE
WHEN SERVERPROPERTY('InstanceName') IS NULL THEN ''
ELSE SERVERPROPERTY('InstanceName')
END AS InstanceName,
'' as Port, --need to update to strip from Servername. Note: Assumes Registered Server is named with Port
SUBSTRING ( (SELECT @@VERSION),1, CHARINDEX('-',(SELECT @@VERSION))-1 ) as ProductName,
SERVERPROPERTY('ProductVersion') AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('ProductMajorVersion') AS ProductMajorVersion,
SERVERPROPERTY('ProductMinorVersion') AS ProductMinorVersion,
SERVERPROPERTY('ProductBuild') AS ProductBuild,
SERVERPROPERTY('Edition') AS Edition,
CASE SERVERPROPERTY('EngineEdition')
WHEN 1 THEN 'PERSONAL'
WHEN 2 THEN 'STANDARD'
WHEN 3 THEN 'ENTERPRISE'
WHEN 4 THEN 'EXPRESS'
WHEN 5 THEN 'SQL DATABASE'
WHEN 6 THEN 'SQL DATAWAREHOUSE'
END AS EngineEdition,
CASE SERVERPROPERTY('IsHadrEnabled')
WHEN 0 THEN 'The Always On Availability Groups feature is disabled'
WHEN 1 THEN 'The Always On Availability Groups feature is enabled'
ELSE 'Not applicable'
END AS HadrEnabled,
CASE SERVERPROPERTY('HadrManagerStatus')
WHEN 0 THEN 'Not started, pending communication'
WHEN 1 THEN 'Started and running'
WHEN 2 THEN 'Not started and failed'
ELSE 'Not applicable'
END AS HadrManagerStatus,
CASE SERVERPROPERTY('IsSingleUser') WHEN 0 THEN 'No' ELSE 'Yes' END AS InSingleUserMode,
CASE SERVERPROPERTY('IsClustered')
WHEN 1 THEN 'Clustered'
WHEN 0 THEN 'Not Clustered'
ELSE 'Not applicable'
END AS IsClustered,
'' as ServerEnvironment,
'' as ServerStatus,
'' as Comments
So rufen Sie die Liste der Server und Instanzen ab, mit denen Sie verbunden sind:
select * from Sys.Servers
So rufen Sie die Liste der Datenbanken ab, über die der verbundene Server verfügt:
SELECT * from sys.databases;
Nur um die Registrierungsabfragen etwas zu verdeutlichen. Sie listen nur die Instanzen der übereinstimmenden Bit (32 oder 64) für die aktuelle Instanz auf.
Der tatsächliche Registrierungsschlüssel für 32-Bit-SQL-Instanzen unter einem 64-Bit-Betriebssystem lautet:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
Sie können dies für eine 64-Bit-Instanz abfragen, um auch alle 32-Bit-Instanzen abzurufen. Die 32-Bit-Instanz scheint auf den Wow6432Node beschränkt zu sein und kann daher den 64-Bit-Registrierungsbaum nicht lesen.
SELECT @@SERVERNAME
erzeugt das Ergebnis, das für die Verbindung mit benötigt wirdsqlcmd -S
. Wenn es sich um die Standardinstanz MSSQLSERVER handelt, muss sie im Parameter -S nicht angegeben werden. Dies ist am 2017 14.0.2002.14 Developer Edition, 64-Bit.