Как определить, является ли 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 возвращает имя хоста