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 .
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'.
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.
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)".
- 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
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 }
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 .
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
Service de navigation SQL Server http://msdn.Microsoft.com/en-us/library/ms181087.aspx
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.
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.
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.
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.
Cette requête devrait vous donner le nom du serveur et le nom de l'instance:
SELECT @@SERVERNAME, @@SERVICENAME
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);
}
Si vous êtes dans SSMS, vous trouverez peut-être plus facile d’utiliser:
SELECT @@Version
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.
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}
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.
et dans l'écran suivant, accédez à Outils et cliquez sur le rapport de découverte comme indiqué ci-dessous.
Cela vous montrera toutes les instances présentes ainsi que des fonctionnalités entières .. ci-dessous est un instantané sur mon pc