web-dev-qa-db-fra.com

Comment déterminer les instances installées de SQL Server et leurs versions?

J'essaie de déterminer quelles instances de SQL Server/sql Express que j'ai installées (manuellement ou par programme) mais tous les exemples me disent d'exécuter une requête SQL pour déterminer celle qui suppose que je suis déjà connecté à une instance particulière .

205
Luke

En ligne de commande:

SQLCMD -L

ou 

OSQL -L

(Remarque: doit être un L majuscule)

Ceci listera tous les serveurs SQL installés sur votre réseau. Il existe des options de configuration que vous pouvez définir pour empêcher un serveur SQL de figurer dans la liste. Pour faire ça...

En ligne de commande:

svrnetcn

Dans la liste des protocoles activés, sélectionnez "TCP/IP", puis cliquez sur Propriétés. Il y a une case à cocher pour 'Masquer le serveur'.

189
G Mastros

Vous pouvez interroger cette valeur de registre pour obtenir la version SQL directement:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\Tools\ClientSetup\CurrentVersion

Vous pouvez également interroger votre nom d'instance, puis utiliser sqlcmd avec le nom d'instance souhaité: 

Pour voir votre nom d'instance:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names

Ensuite, exécutez ceci:

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

Si vous utilisez C++, vous pouvez utiliser ce code pour obtenir les informations de registre.

78
Brian R. Bondy

Toutes les instances installées doivent apparaître dans le composant logiciel enfichable Services de Microsoft Management Console. Pour obtenir les noms d'instance, allez à Démarrer | Run | tapez Services.msc et recherchez toutes les entrées avec "Sql Server (Nom de l'instance)".

72
dotnetengineer

- Requête T-SQL pour trouver la liste des instances installées sur une machine

DECLARE @GetInstances TABLE
( Value nvarchar(100),
 InstanceNames nvarchar(100),
 Data nvarchar(100))

Insert into @GetInstances
EXECUTE xp_regread
  @rootkey = 'HKEY_LOCAL_MACHINE',
  @key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
  @value_name = 'InstalledInstances'

Select InstanceNames from @GetInstances 
43

Si vous voulez juste voir ce qui est installé sur la machine à laquelle vous êtes actuellement connecté, je pense que le processus manuel le plus simple consiste à ouvrir le Gestionnaire de configuration SQL Server (à partir du menu Démarrer), qui affiche tous les services SQL (et uniquement services SQL) sur ce matériel (en cours d’exécution ou non). Cela suppose SQL Server 2005 ou supérieur; La recommandation de dotnetengineer _ d'utiliser la console de gestion des services vous montrera tous les services et devrait toujours être disponible (si vous utilisez des versions antérieures de SQL Server, par exemple).

Toutefois, si vous recherchez un processus de découverte plus étendu, vous pouvez envisager des outils tiers, tels que SQLRecon et SQLPing, qui analyseront votre réseau et créeront un rapport de toutes les instances de service SQL trouvées sur tout serveur auquel ils ont accès. Cela fait longtemps que je n’utilise pas d’outils comme celui-ci, mais j’ai été surpris de ce qu’ils ont découvert (c’est-à-dire quelques exemples dont je ne connaissais pas l'existence). YMMV. Vous pouvez consulter Google pour plus de détails, mais je pense que cette page contient les téléchargements pertinents: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx }

11
Matt

Je sais que ce fil est un peu vieux, mais je suis tombé sur ce fil avant de trouver la réponse que je cherchais et de penser partager. Si vous utilisez SQLExpress (ou localdb), il existe un moyen plus simple de rechercher vos noms d'instance . Sur un type de ligne de commande:

> sqllocaldb i

Ceci listera les noms d'instance que vous avez installés localement. Donc, votre nom de serveur complet doit inclure (localdb)\devant le nom de l'instance à connecter. En outre, sqllocaldb vous permet de créer de nouvelles instances ou de les supprimer ainsi que de les configurer. Voir: Utilitaire SqlLocalDB .

9
John Denton

SQL Server permet aux applications de rechercher des instances SQL Server au sein du réseau actuel. La classe SqlDataSourceEnumerator expose ces informations au développeur d'applications en fournissant un DataTable contenant des informations sur tous les serveurs visibles. Cette table renvoyée contient une liste des instances de serveur disponibles sur le réseau, qui correspond à la liste fournie lorsqu'un utilisateur tente de créer une nouvelle connexion, et développe la liste déroulante contenant tous les serveurs disponibles dans la boîte de dialogue Propriétés de connexion. Les résultats affichés ne sont pas toujours complets . Pour extraire la table contenant des informations sur les instances SQL Server disponibles, vous devez d'abord extraire un énumérateur à l'aide de la propriété Instance shared/static:

using System.Data.Sql;

class Program
{
  static void Main()
  {
    // Retrieve the enumerator instance and then the data.
    SqlDataSourceEnumerator instance =
      SqlDataSourceEnumerator.Instance;
    System.Data.DataTable table = instance.GetDataSources();

    // Display the contents of the table.
    DisplayData(table);

    Console.WriteLine("Press any key to continue.");
    Console.ReadKey();
  }

  private static void DisplayData(System.Data.DataTable table)
  {
    foreach (System.Data.DataRow row in table.Rows)
    {
      foreach (System.Data.DataColumn col in table.Columns)
      {
        Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
      }
      Console.WriteLine("============================");
    }
  }
}

from msdn http://msdn.Microsoft.com/en-us/library/a6t1z9x2(v=vs.80).aspx

5
Ian
5
Cade Roux

Si vous souhaitez déterminer cela dans un script, vous pouvez essayer les solutions suivantes:

sc \\server_name query | grep MSSQL

Remarque: grep fait partie des outils gnuwin32.

4
Dale Sykora

A partir de la ligne de commande Windows, tapez:

SC \\server_name query | find /I "SQL Server ("

Où "nom_serveur" est le nom de tout serveur distant sur lequel vous souhaitez afficher les instances SQL.

Cela nécessite bien sûr des autorisations suffisantes.

4
jimbo

J'ai eu le même problème. La commande "osql -L" n'affichait qu'une liste de serveurs mais sans nom d'instance (seule l'instance de mon serveur SQL local était affichée) . Avec Wireshark, sqlbrowser.exe (pouvant être trouvé dans le dossier partagé de votre Installation SQL), j'ai trouvé une solution à mon problème.

L'instance locale est résolue par entrée de registre. Les instances distantes sont résolues par diffusion UDP (port 1434) et SMB . Utilisez "sqlbrowser.exe -c" pour répertorier les demandes.

Ma configuration utilise 1 carte réseau physique et 3 cartes réseau virtuelles. Si j’ai utilisé la commande "osql -L", sqlbrowser a affiché une requête de l’un des adaptateurs virtuels (qui se trouve dans un autre segment de réseau), au lieu de l’opérateur physique . Vous pouvez voir la métrique avec la commande "route print" . Pour ma configuration, la table de routage affichait une métrique inférieure pour l'adaptateur virtuel, puis pour l'adaptateur physique. J'ai donc modifié la métrique d'interface dans les propriétés du réseau en désélectionnant la métrique automatique dans les paramètres réseau avancés . Osql utilise désormais l'adaptateur physique.

2
Daniel

Je viens d'installer Sql Server 2008, mais je n'ai pas pu me connecter à aucune instance de base de données .

J'ai donc examiné les services et constaté que l'agent du serveur SQL était désactivé. Je l'ai corrigé en le réglant sur automatique puis en le démarrant.

1
Moulde

Cette requête devrait vous donner le nom du serveur et le nom de l'instance: 

SELECT @@SERVERNAME, @@SERVICENAME
1
Anonymous

J'avais le même problème lorsque j'évaluais plus de 100 serveurs. J'avais un script écrit en C # pour parcourir les noms de services composés de SQL. Lorsque des instances sont installées sur le serveur, SQL Server ajoute un service pour chaque instance avec le nom du service. Cela peut varier d’une version à l’autre, comme de 2000 à 2008, mais il existe un service avec un nom d’instance. 

Je prends le nom du service et obtient le nom de l'instance à partir du nom du service. Voici l'exemple de code utilisé avec le résultat de la requête WMI:

if (ServiceData.DisplayName == "MSSQLSERVER" || ServiceData.DisplayName == "SQL Server (MSSQLSERVER)")
            {
                InstanceData.Name = "DEFAULT";
                InstanceData.ConnectionName = CurrentMachine.Name;
                CurrentMachine.ListOfInstances.Add(InstanceData);
            }
            else
                if (ServiceData.DisplayName.Contains("SQL Server (") == true)
                {
                    InstanceData.Name = ServiceData.DisplayName.Substring(
                                            ServiceData.DisplayName.IndexOf("(") + 1,
                                            ServiceData.DisplayName.IndexOf(")") - ServiceData.DisplayName.IndexOf("(") - 1
                                        );
                    InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
                    CurrentMachine.ListOfInstances.Add(InstanceData);
                }
                else
                    if (ServiceData.DisplayName.Contains("MSSQL$") == true)
                    {
                        InstanceData.Name = ServiceData.DisplayName.Substring(
                                                ServiceData.DisplayName.IndexOf("$") + 1,
                                                ServiceData.DisplayName.Length - ServiceData.DisplayName.IndexOf("$") - 1
                                            );

                        InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
                        CurrentMachine.ListOfInstances.Add(InstanceData);
                    }
1
AbuTaareq

Si vous êtes dans SSMS, vous trouverez peut-être plus facile d’utiliser:

SELECT @@Version
0
Craig

Voici une méthode simple: Aller à Démarrer puis Programmes puis Microsoft SQL Server 2005, puis Outils de configuration puis Gestionnaire de configuration SQL Server, puis. Configuration thenHere vous pouvez localiser toute l'instance installée sur votre machine.

0
Badar

Je sais que c’est un vieux message, mais j’ai trouvé une solution intéressante avec PoweShell, qui permet de rechercher des instances SQL installées sur un ordinateur local ou distant, y compris la version, et d’étendre ses propriétés. 

$MachineName = ‘.’ # Default local computer Replace . with server name for a remote computer

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(‘LocalMachine’, $MachineName)
$regKey= $reg.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL" )
$values = $regkey.GetValueNames()
$values | ForEach-Object {$value = $_ ; $inst = $regKey.GetValue($value); 
              $path = "SOFTWARE\\Microsoft\\Microsoft SQL Server\\"+$inst+"\\MSSQLServer\\"+"CurrentVersion";
              #write-Host $path; 
              $version = $reg.OpenSubKey($path).GetValue("CurrentVersion");
                          write-Host "Instance" $value;
              write-Host  "Version" $version}
0
akhila vangala

Une autre option serait d’exécuter le rapport de découverte SQLSERVER. Allez sur le support d’installation de sqlserver et double-cliquez sur setup.exe. 

 enter image description here

et dans l'écran suivant, accédez à Outils et cliquez sur le rapport de découverte comme indiqué ci-dessous.

 enter image description here

Cela vous montrera toutes les instances présentes ainsi que des fonctionnalités entières .. ci-dessous est un instantané sur mon pc  enter image description here

0
TheGameiswar