Comment puis-je obtenir le serveur SQL Server et le nom de l'instance de la connexion actuelle à l'aide d'un script T-SQL?
Comment puis-je obtenir le serveur SQL Server et le nom de l'instance de la connexion actuelle à l'aide d'un script T-SQL?
Réponses:
Je viens de trouver la réponse, dans cette question SO (littéralement, à l'intérieur de la question, pas de réponse):
SELECT @@servername
renvoie nom_serveur \ instance dans la mesure où ce n'est pas l'instance par défaut
SELECT @@servicename
renvoie le nom de l'instance, même s'il s'agit de la valeur par défaut (MSSQLSERVER)
Que dis-tu de ça:
EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
@key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
@value_name='MSSQLSERVER'
Cela obtiendra également le nom de l'instance. null
signifie instance par défaut:
SELECT SERVERPROPERTY ('InstanceName')
SELECT @@servername
vous donnera des données comme server/instanceName
Pour obtenir uniquement le, instanceName
vous devez exécuter la select @@ServiceName
requête.
J'ai trouvé ça:
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
@value_name = 'InstalledInstances'
Cela vous donnera la liste de toutes les instances installées sur votre serveur.
La
ServerName
propriété de laSERVERPROPERTY
fonction et@@SERVERNAME
renvoie des informations similaires. LaServerName
propriété fournit le serveur Windows et le nom de l'instance qui, ensemble, constituent l'instance de serveur unique.@@SERVERNAME
fournit le nom du serveur local actuellement configuré.
Et l'exemple de Microsoft pour le serveur actuel est:
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
Ce scénario est utile lorsque plusieurs instances de SQL Server sont installées sur un serveur Windows et que le client doit ouvrir une autre connexion à la même instance utilisée par la connexion actuelle.
Pourquoi s'arrêter au seul nom de l'instance? Vous pouvez inventorier votre environnement SQL Server avec les éléments suivants:
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
Pour obtenir la liste des serveurs et des instances auxquels vous êtes connecté:
select * from Sys.Servers
Pour obtenir la liste des bases de données dont dispose le serveur connecté:
SELECT * from sys.databases;
Juste pour ajouter quelques éclaircissements aux requêtes du registre. Ils répertorient uniquement les instances du bitness correspondant (32 ou 64) pour l'instance actuelle.
La clé de registre réelle pour les instances SQL 32 bits sur un système d'exploitation 64 bits est:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
Vous pouvez l'interroger sur une instance 64 bits pour obtenir également toutes les instances 32 bits. L'instance 32 bits semble limitée au Wow6432Node et ne peut donc pas lire l'arborescence du registre 64 bits.
une autre méthode pour trouver le nom de l'instance - Cliquez avec le bouton droit sur le nom de la base de données et sélectionnez Propriétés, dans cette partie, vous pouvez voir les propriétés de connexion dans le coin gauche en bas, cliquez dessus, puis vous pouvez voir le nom de l'instance.
SELECT @@SERVERNAME
produit le résultat nécessaire pour se connecter en utilisantsqlcmd -S
. S'il s'agit de l'instance MSSQLSERVER par défaut, elle ne doit pas être spécifiée dans le paramètre -S. Ceci est sur 2017 14.0.2002.14 Developer Edition, 64 bits.