Pregunta

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

¿Fue útil?

Solución

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 se muestre un SQL Server en la lista. Para hacer esto ...

En la línea de comando:

svrnetcn

En la lista de protocolos habilitados, seleccione 'TCP / IP', luego haga clic en propiedades. Hay una casilla de verificación para 'Ocultar servidor'.

Otros consejos

Puede consultar este valor de registro para obtener la versión de 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 desee:

Para ver el nombre de su instancia:

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

Luego ejecute esto:

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

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

Todas las instancias instaladas deberían aparecer en el complemento de servicios en la consola de administración de Microsoft. Para obtener los nombres de las instancias, vaya a Inicio | Correr | escriba Services.msc y busque todas las entradas con " Servidor SQL (Nombre de instancia) " ;.

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

Sin embargo, si está buscando un proceso de descubrimiento más amplio, puede considerar herramientas de terceros como SQLRecon y SQLPing, que escanearán su red y generarán un informe de todas las instancias del Servicio SQL encontradas en cualquier servidor en el que tengan acceso. Ha pasado un tiempo desde que usé 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 en Google los detalles, 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 me encontré con este hilo antes de encontrar la respuesta que estaba buscando y pensé en compartirla. Si está utilizando SQLExpress (o localdb), hay una forma más sencilla de encontrar los nombres de sus instancias. 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, el nombre completo del servidor debe incluir (localdb) \ delante del nombre de la instancia para conectarse. Además, sqllocaldb le permite crear nuevas instancias o eliminarlas, así como configurarlas. Consulte: SqlLocalDB Utility .

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 tabla de datos 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 conexión. Los resultados que se muestran no siempre son completos. Para recuperar la tabla que contiene información sobre las instancias de SQL Server disponibles, primero debe recuperar un enumerador, utilizando la propiedad de 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 / es-us / library / a6t1z9x2 (v = vs.80) .aspx

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

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

Donde " nombre_servidor " es el nombre de cualquier servidor remoto en el que desea mostrar las instancias de SQL.

Esto requiere suficientes permisos, por supuesto.

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 de gnuwin32

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

La instancia local se resuelve mediante la entrada del registro. Las instancias remotas se resuelven mediante difusión UDP (puerto 1434) y SMB. Utilice " sqlbrowser.exe -c " para enumerar las solicitudes.

Mi configuración utiliza 1 adaptador de red físico y 3 virtuales. Si usé el " osql -L " El comando sqlbrowser mostró una solicitud de uno de los adaptadores virtuales (que está en otro segmento de red), en lugar del físico. osql selecciona el adaptador por su métrica. Puede ver la métrica con el comando " ruta de impresión " ;. Para mi configuración, la tabla de enrutamiento mostró una métrica más baja para el adaptador virtual que para el físico. Así que cambié la métrica de la interfaz en las propiedades de la red anulando 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 debería obtener el nombre del servidor y el nombre de la instancia:

SELECT @@SERVERNAME, @@SERVICENAME

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

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

Tuve el mismo problema cuando estaba evaluando más de 100 servidores, tenía un script escrito en C # para examinar los nombres de servicio que consisten en SQL. Cuando se instalan instancias en el servidor, SQL Server agrega un servicio para cada instancia con el nombre del servicio. Puede variar para diferentes versiones como 2000 a 2008, pero seguramente 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 el resultado de la consulta 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<*>quot;) == true)
                    {
                        InstanceData.Name = ServiceData.DisplayName.Substring(
                                                ServiceData.DisplayName.IndexOf("<*>quot;) + 1,
                                                ServiceData.DisplayName.Length - ServiceData.DisplayName.IndexOf("<*>quot;) - 1
                                            );

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

Aquí hay un método simple: ir Comience entonces Programas entonces Microsoft SQL Server 2005 entonces Herramientas de configuración entonces Administrador de configuración de SQL Server entonces Configuración de red de SQL Server 2005 entonces Aquí puede ubicar todas las instancias instaladas en su máquina.

Si está dentro de SSMS, puede que le resulte más fácil de usar:

SELECT @@Version

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 se pueden 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 = 

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 se pueden obtener otras propiedades.

<*> ; $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 el informe de descubrimiento de SQLSERVER ... vaya a los medios de instalación de sqlserver y haga doble clic en setup.exe

 ingrese la descripción de la imagen aquí

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

 ingrese la descripción de la imagen aquí

Esto le mostrará todas las instancias presentes junto con características completas ... a continuación se muestra una instantánea en mi PC ingrese la descripción de la imagen aquí

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top