¿Cómo puedo determinar las instancias de SQL Server instaladas y sus versiones?

Estoy tratando de determinar qué instancias de sql server / sql express he instalado (ya sea de forma manual o programática) pero todos los ejemplos me dicen que ejecute una consulta SQL para determinar esto, lo que supone que ya estoy conectado a una instancia en particular .

    En una línea de comando:

    SQLCMD -L 

    o

     OSQL -L 

    (Nota: debe ser una L mayúscula)

    Esto mostrará una lista de todos los servidores sql instalados en su red. Hay opciones de configuración que puede configurar para evitar que un servidor SQL se muestre en la lista. Para hacer esto…

    En línea de comando:

     svrnetcn 

    En la lista de protocolos habilitados, seleccione ‘TCP / IP’, luego haga clic en propiedades. Hay una checkbox para ‘Ocultar servidor’.

    Puede consultar este valor de registro para obtener la versión SQL directamente:

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

    Alternativamente, puede consultar el nombre de su instancia y luego usar sqlcmd con el nombre de su instancia que le gustaría:

    Para ver tu nombre de instancia:

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

    Luego ejecuta esto:

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

    Si está usando C ++, puede usar este código para obtener la información del registro.

    Todas las instancias instaladas deberían aparecer en el complemento Servicios en Microsoft Management Console. Para obtener los nombres de instancia, vaya a Inicio | Ejecutar | escriba Services.msc y busque todas las entradas con “Sql Server (Instance Name)”.

    – Consulta T-SQL para encontrar la lista de instancias instaladas en una máquina

     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 solo quiere ver qué está instalado en la máquina en la que está conectado actualmente, creo que el proceso manual más sencillo es simplemente abrir el Administrador de configuración de SQL Server (desde el menú Inicio), que muestra todos los Servicios SQL (y solo servicios SQL) en ese hardware (ejecutándose o no). Esto supone SQL Server 2005 o superior; La recomendación de dotnetengineer de usar la Consola de administración de servicios le mostrará todos los servicios, y siempre debe estar disponible (si está ejecutando versiones anteriores de SQL Server, por ejemplo).

    Sin embargo, si está buscando un proceso de descubrimiento más amplio, podría considerar herramientas de terceros como SQLRecon y SQLPing, que analizarán su red y generarán un informe de todas las instancias de SQL Service encontradas en cualquier servidor al que tengan acceso. Ha pasado un tiempo desde que utilicé herramientas como esta, pero me sorprendió lo que encontraron (es decir, un puñado de casos que no sabía que existían). YMMV. Puede buscar detalles en Google, pero creo que esta página tiene las descargas relevantes: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx

    Sé que este hilo es un poco viejo, pero encontré este hilo antes de encontrar la respuesta que estaba buscando y pensé que compartiría. Si está utilizando SQLExpress (o localdb), hay una forma más sencilla de encontrar los nombres de su instancia. En una línea de comando, escriba:

     > sqllocaldb i 

    Esto mostrará una lista de los nombres de instancia que ha instalado localmente. Por lo tanto, su nombre de servidor completo debe incluir (localdb) \ delante del nombre de la instancia para conectarse. Además, sqllocaldb le permite crear nuevas instancias o eliminarlas, así como configurarlas. Ver: Utilidad SqlLocalDB .

    Servicio del explorador de SQL Server http://msdn.microsoft.com/en-us/library/ms181087.aspx

    SQL Server permite que las aplicaciones encuentren instancias de SQL Server dentro de la red actual. La clase SqlDataSourceEnumerator expone esta información al desarrollador de la aplicación, proporcionando una DataTable que contiene información sobre todos los servidores visibles. Esta tabla devuelta contiene una lista de instancias de servidor disponibles en la red que coincide con la lista proporcionada cuando un usuario intenta crear una nueva conexión y expande la lista desplegable que contiene todos los servidores disponibles en el cuadro de diálogo Propiedades de la conexión. Los resultados que se muestran no siempre están completos. Para recuperar la tabla que contiene información sobre las instancias disponibles de SQL Server, primero debe recuperar un enumerador, utilizando la propiedad Instancia compartida / estática:

     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=vs.80).aspx

    Si está interesado en determinar esto en un script, puede intentar lo siguiente:

     sc \\server_name query | grep MSSQL 

    Nota: grep es parte de las herramientas gnuwin32

    Desde la línea de comandos de Windows, escribe:

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

    Donde “server_name” es el nombre de cualquier servidor remoto en el que desea mostrar las instancias de SQL.

    Esto requiere suficientes permisos por supuesto.

    Yo tuve el mismo problema. El comando “osql -L” mostraba solo una lista de servidores pero sin nombres de instancias (solo se mostraba la instancia de mi SQL Sever local). Con Wireshark, sqlbrowser.exe (que se puede encontrar en la carpeta compartida de su instalación SQL) encontré una solución para mi problema.

    La instancia local se resuelve por entrada de registro. Las instancias remotas se resuelven mediante difusión UDP (puerto 1434) y SMB. Use “sqlbrowser.exe -c” para enumerar las solicitudes.

    Mi configuración usa 1 adaptador físico y 3 adaptadores de red virtuales. Si utilicé el comando “osql -L” el sqlbrowser mostró una solicitud de uno de los adaptadores virtuales (que se encuentra en otro segmento de red), en lugar de uno físico. osql selecciona el adaptador por su métrica. Puede ver la métrica con el comando “imprimir ruta”. Para mi configuración, la tabla de enrutamiento mostró una métrica inferior para el adaptador virtual y luego para el físico. Así que cambié la métrica de la interfaz en las propiedades de la red al anular la selección de la métrica automática en la configuración de red avanzada. osql ahora usa el adaptador físico.

    Esta consulta debe obtener el nombre del servidor y la instancia:

     SELECT @@SERVERNAME, @@SERVICENAME 

    Tuve el mismo problema cuando estaba evaluando más de 100 servidores, tenía un script escrito en C # para navegar por los nombres de los servicios consistentes en SQL. Cuando instancias instaladas en el servidor, SQL Server agrega un servicio para cada instancia con nombre de servicio. Puede variar para diferentes versiones como 2000 a 2008 pero seguro hay un servicio con nombre de instancia.

    Tomo el nombre del servicio y obtengo el nombre de la instancia del nombre del servicio. Aquí está el código de muestra utilizado con WMI Query Result:

     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 está dentro de SSMS puede que le resulte más fácil de usar:

     SELECT @@Version 

    Acabo de instalar el servidor Sql 2008, pero no pude conectarme a ninguna instancia de base de datos. Los comandos @G Mastros publicados no enumeraron instancias activas.

    Así que miré en los servicios y descubrí que el agente del servidor SQL estaba deshabilitado. Lo arreglé configurándolo en automático y luego lo inicié.

    Aquí hay un método simple: vaya a Inicio y luego a Progtwigs, a continuación, a Microsoft SQL Server 2005, a Herramientas de configuración, a Administrador de configuración de SQL Server y luego a Configuración de red de SQL Server 2005. Aquí puede ubicar toda la instancia instalada en su máquina.

    Sé que es una publicación anterior, pero encontré una buena solución con PoweShell donde puedes encontrar instancias de SQL instaladas en una máquina local o remota, incluida la versión, y también obtener otras propiedades.

     $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} 

    Una opción más sería ejecutar SQLSERVER discovery report..go a los medios de instalación de sqlserver y hacer doble clic en setup.exe

    enter image description here

    y en la pantalla siguiente, vaya a herramientas y haga clic en informe de descubrimiento como se muestra a continuación

    enter image description here

    Esto le mostrará todas las instancias presentes junto con características completas. Más abajo está una instantánea en mi PC enter image description here