2010-10-13 34 views
14

En mi aplicación los usuarios pueden elegir de una lista de SQL Server en la red. El caso es que necesito saber si la instancia elegida es una computadora local o remota.¿Cómo saber si SQL Server es local o remoto?

¿Hay alguna manera de preguntarle a la instancia de SQL en qué computadora está? ¿Hay alguna manera de que uno pueda darse cuenta de eso?

Edit1: Quiero saber el nombre de host donde el servidor SQL Server está alojado por lo que a continuación se puede comparar eso a System.Environment.MachineName y saber a ciencia cierta es que SQL Server se está ejecutando en la misma máquina donde mi aplicación se está ejecutando

Edit2:@@servername volvió mi equipo \ SQLInstance mientras SELECT SERVERPROPERTY('MachineName') vuelve solo nombre de la computadora, que es exactamente lo que quiero

Respuesta

11

uso @@Servername, por ejemplo:

SELECT @@servername 

Alternativamente, usted puede hacer esto

SELECT SERVERPROPERTY('MachineName') 

De MSDN sobre las diferencias entre estos enfoques:

La propiedad ServerName de la función SERVERPROPERTY y @@ SERVERNAME volver similares información. La propiedad ServerName proporciona el servidor de Windows y el nombre de instancia que juntos componen la instancia de servidor única. @@ SERVERNAME proporciona el nombre del servidor local configurado actualmente .

La propiedad ServerName y @@ SERVERNAME devuelven la misma información si el nombre de servidor predeterminado en el momento de la instalación no ha sido cambiado .

Si el nombre del servidor local ha sido cambiado de el nombre del servidor predeterminado durante la instalación, @@ SERVERNAME devuelve el nuevo nombre.

+0

por lo @@ nombre del servidor que es .. . Gracias – sebagomez

+1

No pude entender - ¿cómo se puede saber por el nombre devuelto si es local o remoto? –

+0

@ vgv8 - Lo compara con el nombre de la máquina local. – JohnFx

-1

sp_who2 devuelve el nombre de host

+0

Ese sería el nombre asociado con los usuarios que iniciaron sesión, no la instancia de SQL. – JohnFx

+0

Disculpas - Creo que entendí mal la pregunta, ese segundo párrafo es engañoso "¿Hay alguna manera en que pueda preguntarle a esa instancia de SQL en qué computadora está?" donde He = usuario. –

3

¿Usted realmente tiene permisos de acceso en toda la instancia (s) de SQL Server? Si es así, puede ejecutar sp_helpserver o @@ servername y comparar el nombre devuelto con Environment.MachineName.

Si usted no tiene acceso de inicio de sesión, puede escribir un pequeño programa de consola de C# para devolver el nombre del servidor de cada instancia de SQL Server en la red local:

using System; 
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. 
     // The first column is the server name. 
     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("============================"); 
     } 
    } 
} 
Cuestiones relacionadas