Come posso ottenere il server SQL Server e il nome dell'istanza della connessione corrente, utilizzando uno script T-SQL?
Come posso ottenere il server SQL Server e il nome dell'istanza della connessione corrente, utilizzando uno script T-SQL?
Risposte:
Ho appena trovato la risposta, in questa domanda SO (letteralmente, all'interno della domanda, nessuna risposta):
SELECT @@servername
restituisce servername \ istanza fino a quando questa non è l'istanza predefinita
SELECT @@servicename
restituisce il nome dell'istanza, anche se questo è il valore predefinito (MSSQLSERVER)
Cosa ne pensi di questo:
EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
@value_name='MSSQLSERVER'
Questo riceverà anche il nome dell'istanza. null
significa istanza predefinita:
SELECT SERVERPROPERTY ('InstanceName')
SELECT @@servername
ti darà i dati come server/instanceName
Per ottenere solo il instanceName
è necessario eseguire select @@ServiceName
query.
Perché fermarsi solo al nome dell'istanza? Puoi inventario del tuo ambiente SQL Server con quanto segue:
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
Ho trovato questo:
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
@value_name = 'InstalledInstances'
Questo ti darà un elenco di tutte le istanze installate nel tuo server.
La
ServerName
proprietà dellaSERVERPROPERTY
funzione e@@SERVERNAME
restituisce informazioni simili. LaServerName
proprietà fornisce il server Windows e il nome dell'istanza che insieme costituiscono l'istanza del server univoca.@@SERVERNAME
fornisce il nome del server locale attualmente configurato.
E l'esempio di Microsoft per il server corrente è:
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
Questo scenario è utile quando sono presenti più istanze di SQL Server installate su un server Windows e il client deve aprire un'altra connessione alla stessa istanza utilizzata dalla connessione corrente.
Per ottenere l'elenco dei server e delle istanze a cui sei connesso:
select * from Sys.Servers
Per ottenere l'elenco dei database di cui dispone il server connesso:
SELECT * from sys.databases;
Giusto per aggiungere qualche chiarimento alle query del registro. Elenca solo le istanze del bitness corrispondente (32 o 64) per l'istanza corrente.
La chiave di registro effettiva per istanze SQL a 32 bit su un sistema operativo a 64 bit è:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
Puoi eseguire una query su un'istanza a 64 bit per ottenere anche tutte le istanze a 32 bit. L'istanza a 32 bit sembra limitata al Wow6432Node, quindi non è in grado di leggere l'albero del registro a 64 bit.
un altro metodo per trovare il nome dell'istanza: fare clic con il pulsante destro del mouse sul nome del database e selezionare Proprietà, in questa parte è possibile visualizzare le proprietà della connessione nell'angolo in basso a sinistra, fare clic per visualizzare il nome dell'istanza.
SELECT @@SERVERNAME
produce il risultato necessario per connettersi utilizzandosqlcmd -S
. Se è l'istanza MSSQLSERVER predefinita, non deve essere specificata nel parametro -S. Questo è su 2017 14.0.2002.14 Developer edition, 64 bit.