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

j'essaye de déterminer quelles instances de sql server/sql express j'ai installées (manuellement ou programmatiquement) mais tous les exemples me disent d'exécuter une requête SQL pour déterminer ceci qui suppose que je suis déjà connecté à une instance particulière.

197
demandé sur ConcernedOfTunbridgeWells 2008-09-26 22:32:23

18 réponses

en ligne de commande:

SQLCMD -L

ou

OSQL -L

(Note: doit être un capital L)

cette liste énumère tous les serveurs sql installés sur votre réseau. Il y a des options de configuration que vous pouvez paramétrer pour empêcher un serveur SQL d'apparaître dans la liste. Pour ce faire...

en ligne de commande:

svrnetcn

dans la liste des Protocoles activés, sélectionnez "TCP / IP", puis cliquez propriété. Il y a une case à cocher pour 'Hide server'.

183
répondu G Mastros 2013-06-18 00:17:40

vous pouvez interroger cette valeur de Registre pour obtenir la version SQL directement:

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

vous pouvez aussi interroger le nom de votre instance, puis utiliser sqlcmd avec le nom de votre instance que vous souhaitez:

pour voir le nom de votre instance:

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

alors exécutez ceci:

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

si vous utilisez C++, vous pouvez utiliser ce code pour obtenir les informations du registre.

77
répondu Brian R. Bondy 2017-05-23 10:31:16

toutes les instances installées doivent apparaître dans le Snap-In des Services de Microsoft Management Console. Pour obtenir les noms d'instance, allez à Démarrer | Exécuter | tapez Services.msc et rechercher toutes les entrées avec " Sql Server (Instance Name)".

71
répondu dotnetengineer 2008-09-26 18:37:18

-- 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
répondu Mohammed Ifteqar Ahmed 2012-02-27 12:06:07

si vous voulez juste voir ce qui est installé sur la machine dans laquelle vous êtes actuellement connecté, je pense que le processus manuel le plus simple est d'ouvrir simplement le Gestionnaire de Configuration du serveur SQL (à partir du menu Démarrer), qui affiche tous les Services SQL (et seulement services SQL) sur ce matériel (en cours d'exécution ou non). Cela suppose SQL Server 2005, ou plus; dotnetengineer recommandation de l'utilisation de la Console de gestion des Services montrera vous tous les services, et devrait toujours être disponible (si vous utilisez des versions plus anciennes de SQL Server, par exemple).

si vous êtes à la recherche d'un processus de découverte plus large, cependant, vous pourriez envisager des outils tiers tels que SQLRecon et SQLPing, qui va scanner votre réseau et construire un rapport de toutes les instances de service SQL trouvées sur n'importe quel serveur auquel ils ont accès. Cela fait longtemps que j'ai utilisé des outils comme celui-ci, mais j'ai été surpris de ce qu'ils ont trouvé (à savoir, un quelques exemples que je ne savais pas qu'ils existaient). YMMV. Vous pouvez Google pour les détails, mais je crois que cette page a les téléchargements pertinents: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx

11
répondu Matt 2017-05-23 11:54:47

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 pensé que je partagerais. Si vous utilisez SQLExpress (ou localdb), il y a une façon plus simple de trouver les noms de vos instances. À une ligne de commande type:

> sqllocaldb i

cette liste énumère les noms d'instance que vous avez installés localement. Ainsi, le nom complet de votre serveur doit inclure (localdb)\ devant le nom de l'instance à connecter. En outre, sqllocaldb vous permet de créer nouvelles instances ou supprimez-les ainsi que configurez-les. Voir: Sqllocaldb Utility .

7
répondu John Denton 2016-11-14 21:42:56
5
répondu Cade Roux 2008-09-26 18:35:51

SQL Server permet aux applications de trouver des instances SQL Server dans le réseau courant. La classe SqlDataSourceEnumerator expose ces informations au développeur d'application, fournissant un DataTable contenant des informations sur tous les serveurs visibles. Cette table retournée contient une liste d'instances de serveur disponible sur le réseau qui correspond à la liste fournie lorsqu'un utilisateur tente de créer une nouvelle connexion, et élargit la liste déroulante contenant tous les serveurs disponibles sur la boîte de dialogue Propriétés de connexion. Les résultats affichés ne sont pas toujours complètes. Afin de récupérer la table contenant des informations sur les instances SQL Server disponibles, vous devez d'abord récupérer un énumérateur, en utilisant la propriété D'Instance partagée/statique:

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("============================");
    }
  }
}

de msdn http://msdn.microsoft.com/en-us/library/a6t1z9x2 (v = 80).aspx

5
répondu Ian 2012-03-21 21:19:32

si vous êtes intéressé à le déterminer dans un script, vous pouvez essayer ce qui suit:

sc \server_name query | grep MSSQL

Note: grep fait partie des outils gnuwin32

4
répondu Dale Sykora 2012-11-19 02:29:22

à Partir de Windows en ligne de commande, tapez:

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

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

cela nécessite assez de permissions bien sûr.

4
répondu jimbo 2017-01-24 11:01:36

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

l'instance locale est résolue par une entrée dans le registre. Les instances distantes sont résolues par UDP broadcast (port 1434) et SMB. Utilisez " sqlbrowser.exe-c " pour énumérer les demande.

ma configuration utilise 1 adaptateur de réseau physique et 3 adaptateurs de réseau virtuel. Si j'utilise la commande" osql-L", le sqlbrowser affiche une requête d'un des adaptateurs virtuels (qui se trouve dans un autre segment du réseau), au lieu d'une requête physique. osql sélectionne l'adpater par sa métrique. Vous pouvez voir la métrique avec la commande "route print". Pour ma configuration la table de routage a montré une métrique plus basse pour l'adaptateur virtuel puis pour le physique. Donc j'ai changé l'interface métrique dans les propriétés réseau en désélectionnant Métrique automatique dans les paramètres réseau avancés. osql utilise maintenant l'adaptateur physique.

2
répondu Daniel 2010-12-22 10:30:35

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

SELECT @@SERVERNAME, @@SERVICENAME
1
répondu Anonymous 2012-09-27 10:14:15

j'ai eu ce même problème quand j'évaluais plus de 100 SERVEURS, j'ai eu un script écrit en C# pour parcourir les noms de service se composent de SQL. Lorsque des instances sont installées sur le serveur, SQL Server ajoute un service pour chaque instance avec un nom de service. Il peut varier pour différentes versions comme 2000 à 2008 mais il est certain qu'il y a un service avec le nom de l'instance.

je prends le nom du service et j'obtiens le nom de l'instance à partir du nom du service. Voici le code d'exemple utilisé avec la requête WMI Résultat:

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
répondu AbuTaareq 2013-03-28 17:39:33

si votre SSMS interne vous le trouvez plus facile à utiliser:

SELECT @@Version
1
répondu Craig 2016-01-16 06:27:20

je viens d'installer Sql server 2008, mais je n'ai pu me connecter à aucune instance de base de données. Les commandes postées par @G Mastros ne mentionnaient aucune instance active.

alors j'ai regardé dans les services et j'ai trouvé que L'agent de SQL server était désactivé. J'ai corrigé par la mise à automatique et démarrage.

0
répondu Moulde 2011-12-14 00:34:02

Voici une méthode simple: aller à Commencer alors Les programmes, puis Microsoft SQL Server 2005 then Outils de Configuration SQL Server Configuration Manager then SQL Server 2005 Network Configuration then Ici vous pouvez localiser toutes les instances installées sur votre machine.

0
répondu Badar 2012-08-02 20:45:11

je sais que c'est un ancien poste, mais j'ai trouvé une bonne solution avec PoweShell où vous pouvez trouver des instances SQL installées sur une machine locale ou distante, y compris la version et aussi être étendre obtenir d'autres 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
répondu akhila vangala 2016-12-01 15:42:04

une autre option serait D'exécuter SQLSERVER discovery report..allez sur les supports d'installation de sqlserver et double-cliquez sur setup.exe

enter image description here

et dans l'écran suivant,allez à outils et cliquez sur rapport de découverte comme indiqué ci-dessous

enter image description here

cela vous montrera toutes les instances présentes ainsi que l'intégralité caractéristique..ci-dessous est un aperçu sur mon pc enter image description here

0
répondu TheGameiswar 2018-01-16 14:58:08