在我的应用中,用户可以从网络中的SQL Server列表中进行选择。问题是我需要知道所选实例是本地计算机还是远程计算机。
有没有办法可以让SQL实例询问她的电脑是什么?有没有办法解决这个问题?
编辑1:我想知道托管SQL Server的主机名,以便我可以将其与System.Environment.MachineName
进行比较,并确定Sql Server是否正在运行我的应用运行的机器
Edit2: @@servername
返回了我的computername \ sqlinstance,而SELECT SERVERPROPERTY('MachineName')
只返回了计算机名,这正是我想要的
答案 0 :(得分:11)
使用@@Servername,例如:
SELECT @@servername
或者你可以这样做
SELECT SERVERPROPERTY('MachineName')
从MSDN上了解这些方法之间的差异:
的ServerName属性 SERVERPROPERTY函数和 @@ SERVERNAME返回类似 信息。 ServerName属性 提供Windows服务器和 一起构成的实例名称 唯一的服务器实例。 @@ SERVERNAME目前提供 配置本地服务器名称。
ServerName属性和 @@ SERVERNAME返回相同 信息是否为默认服务器名称 在安装时没有 被改变了。
如果是本地服务器名称 已从默认服务器名称更改 在安装时,@ @ SERVERNAME 返回新名称。
答案 1 :(得分:3)
您是否真的拥有SQL Server所有实例的登录权限?如果是这样,您可以执行 sp_helpserver 或 @@ servername ,并将返回的名称与 Environment.MachineName 进行比较。
如果您没有登录权限,可以编写一个小型C#控制台程序,以返回本地网络上每个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("============================");
}
}
}
答案 2 :(得分:-1)
sp_who2返回主机名