web-dev-qa-db-fra.com

Comment obtenir le nom d'instance actuel auprès de T-SQL

Comment obtenir le nom du serveur SQL Server et de l'instance de la connexion actuelle à l'aide d'un script T-SQL?

67

Je viens de trouver la réponse dans cette SO question (littéralement, dans la question, pas de réponse):

SELECT @@servername

retourne nom_serveur\instance dans la mesure où il ne s'agit pas de 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)

132

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 donnera aussi le nom de l'instance. null signifie instance par défaut:

SELECT SERVERPROPERTY ('InstanceName')

http://technet.Microsoft.com/en-us/library/ms174396.aspx

15
Beno

SELECT @@servername vous donnera les données en tant que server/instanceName

Pour obtenir uniquement la instanceName, vous devez exécuter la requête select @@ServiceName.

10

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 propriété ServerName de la fonction SERVERPROPERTY et @@SERVERNAME renvoie des informations similaires. La propriété ServerName fournit le nom de serveur et d'instance Windows qui constituent l'instance de serveur unique. @@SERVERNAME fournit le nom du serveur local actuellement configuré.

Et l'exemple 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 que celle utilisée par la connexion en cours.

8
shA.t

Pourquoi s'arrêter juste au 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
5
Nate S.

Juste pour ajouter des précisions aux requêtes du registre. Ils ne répertorient que 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 la suivante:

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 de registre 64 bits.

1
Colin Campbell

une autre méthode pour trouver le nom de l'instance: Clic à droite 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 la connexion dans le coin inférieur gauche, puis cliquez sur le nom de l'instance.

0
Yasin