Jak uzyskać serwer SQL Server i nazwę wystąpienia bieżącego połączenia za pomocą skryptu T-SQL?
Jak uzyskać serwer SQL Server i nazwę wystąpienia bieżącego połączenia za pomocą skryptu T-SQL?
Odpowiedzi:
Właśnie znalazłem odpowiedź, w tym pytaniu SO (dosłownie, wewnątrz pytania, nie ma żadnej odpowiedzi):
SELECT @@servername
zwraca nazwa_serwera \ instancja, o ile nie jest to instancja domyślna
SELECT @@servicename
zwraca nazwę instancji, nawet jeśli jest to wartość domyślna (MSSQLSERVER)
Co powiesz na to:
EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
@value_name='MSSQLSERVER'
Spowoduje to również uzyskanie nazwy instancji. null
oznacza instancję domyślną:
SELECT SERVERPROPERTY ('InstanceName')
SELECT @@servername
poda Ci dane jako server/instanceName
Aby uzyskać tylko to instanceName
, należy uruchomić select @@ServiceName
zapytanie.
Znalazłem to:
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
@value_name = 'InstalledInstances'
To da ci listę wszystkich instancji zainstalowanych na twoim serwerze.
ServerName
WłasnośćSERVERPROPERTY
funkcji i@@SERVERNAME
powrócić podobne informacje.ServerName
Obiekt zapewnia serwera i nazwa instancji systemu Windows, które razem tworzą niepowtarzalną instancję serwera.@@SERVERNAME
zawiera aktualnie skonfigurowaną nazwę serwera lokalnego.
Przykładem firmy Microsoft dla obecnego serwera jest:
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
Ten scenariusz jest przydatny, gdy istnieje wiele wystąpień programu SQL Server zainstalowanych na serwerze Windows, a klient musi otworzyć inne połączenie z tym samym wystąpieniem używanym przez bieżące połączenie.
Dlaczego poprzestać tylko na nazwie instancji? Możesz inwentaryzować swoje środowisko SQL Server za pomocą:
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
Aby uzyskać listę serwerów i instancji, z którymi masz połączenie:
select * from Sys.Servers
Aby uzyskać listę baz danych, które posiada podłączony serwer:
SELECT * from sys.databases;
Tylko po to, aby dodać wyjaśnienia do zapytań rejestru. Podają tylko wystąpienia pasującej bitowości (32 lub 64) dla bieżącej instancji.
Rzeczywisty klucz rejestru dla 32-bitowych instancji SQL w 64-bitowym systemie operacyjnym to:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
Możesz wysłać zapytanie do instancji 64-bitowej, aby uzyskać również wszystkie instancje 32-bitowe. Wystąpienie 32-bitowe wydaje się ograniczone do Wow6432Node, więc nie może odczytać 64-bitowego drzewa rejestru.
SELECT @@SERVERNAME
daje wynik potrzebny do połączenia za pomocąsqlcmd -S
. Jeśli jest to domyślna instancja MSSQLSERVER, to nie można jej określić w parametrze -S. To jest wersja 64-bitowa dla programistów z 2017 r. 14.0.2002.14.