Как определить, является ли SQL Server локальным или удаленным?

В моем приложении пользователи выбирают из списка SQL Server в сети. Дело в том, что мне нужно знать, является ли выбранный экземпляр локальным или удаленным компьютером.

Есть ли способ, которым я могу спросить, что экземпляр SQL, на каком компьютере она работает? Можно ли это понять?

Edit1: Я хочу знать имя хоста, где размещен SQL Server, поэтому я могу сравнить его с System.Environment.MachineName и точно знаете, что Sql Server работает на том же компьютере, на котором работает мое приложение.

Edit2: @@servername вернул мое имя_компьютера\sqlinstance, а SELECT SERVERPROPERTY('MachineName') возвращает только имя_компьютера, что именно то, что я хочу

Ответы

Ответ 1

Используйте @@Servername, например:

SELECT @@servername

В качестве альтернативы вы можете сделать это

SELECT SERVERPROPERTY('MachineName') 

Из MSDN о различиях между этими подходами:

Свойство ServerName для Функция SERVERPROPERTY и @@SERVERNAME возвращает аналогичные Информация. Свойство ServerName обеспечивает сервер Windows и имя экземпляра, которые вместе составляют уникальный экземпляр сервера. @@SERVERNAME предоставляет настроенное имя локального сервера.

Свойство ServerName и @@SERVERNAME возвращает то же самое информация, если имя сервера по умолчанию на момент установки не были изменены.

Если имя локального сервера было изменено с имени сервера по умолчанию во время установки, @@SERVERNAME возвращает новое имя.

Ответ 2

У вас действительно есть права доступа на все экземпляры SQL Server? Если это так, вы можете выполнить sp_helpserver или @@servername и сравнить имя, возвращенное с помощью Environment.MachineName.

Если у вас нет входа в систему, вы можете написать небольшую консольную программу С#, чтобы вернуть имя сервера для каждого экземпляра SQL Server в локальной сети:

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

Ответ 3

sp_who2 возвращает имя хоста