如何判断SQL Server是本地还是远程?

时间:2010-10-13 15:19:56

标签: sql-server

在我的应用中,用户可以从网络中的SQL Server列表中进行选择。问题是我需要知道所选实例是本地计算机还是远程计算机。

有没有办法可以让SQL实例询问她的电脑是什么?有没有办法解决这个问题?

编辑1:我想知道托管SQL Server的主机名,以便我可以将其与System.Environment.MachineName进行比较,并确定Sql Server是否正在运行我的应用运行的机器

Edit2: @@servername返回了我的computername \ sqlinstance,而SELECT SERVERPROPERTY('MachineName')只返回了计算机名,这正是我想要的

3 个答案:

答案 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返回主机名