2010-10-13 23 views
14

Trong ứng dụng của tôi, người dùng được chọn từ danh sách SQL Server trong mạng. Vấn đề là tôi cần phải biết nếu trường hợp được chọn là một máy tính cục bộ hoặc từ xa.Làm thế nào để biết SQL Server là cục bộ hay từ xa?

Có cách nào tôi có thể yêu cầu cá thể SQL đó trên máy tính nào không? Có cách nào có thể hình dung ra điều đó không?

Edit1: Tôi muốn biết tên máy chủ nơi SQL Server được lưu trữ vì vậy tôi sau đó có thể so sánh với System.Environment.MachineName và biết chắc chắn là Sql Server đang chạy trên cùng một máy mà ứng dụng của tôi đang chạy

Edit2:@@servername trở tôi computername \ sqlinstance khi SELECT SERVERPROPERTY('MachineName') lợi nhuận chỉ là computername, đó là chính xác những gì tôi muốn

Trả lời

11

Sử dụng @@Servername, ví dụ:

SELECT @@servername 

Cách khác bạn có thể làm điều này

SELECT SERVERPROPERTY('MachineName') 

Từ MSDN về sự khác biệt giữa các phương pháp:

Thuộc tính ServerName của hàm SERVERPROPERTY và @@ SERVERNAME trở lại tương tự như thông tin . Thuộc tính ServerName cung cấp máy chủ Windows và tên trường hợp cùng nhau tạo thành phiên bản máy chủ duy nhất. @@ SERVERNAME cung cấp tên máy chủ cục bộ được định cấu hình hiện tại.

Thuộc tính ServerName và @@ SERVERNAME trở lại cùng một thông tin nếu tên máy chủ mặc định tại thời điểm cài đặt chưa được thay đổi.

Nếu tên máy chủ cục bộ đã được thay đổi từ tên máy chủ mặc định tại thời điểm cài đặt, @@ SERVERNAME trả về tên mới.

+0

quá @@ servername nó là .. Cảm ơn – sebagomez

+1

Tôi không thể hiểu - làm thế nào để bạn tìm ra từ tên trả về cho dù đó là địa phương hay từ xa? –

+0

@ vgv8 - Bạn so sánh nó với tên của máy cục bộ. – JohnFx

-1

sp_who2 trả về hostname

+0

Đó sẽ là tên được liên kết với (những) người dùng đã đăng nhập, không phải là cá thể SQL. – JohnFx

+0

Xin lỗi - Tôi đoán tôi đã hiểu sai câu hỏi, đoạn thứ hai là gây hiểu lầm "Có cách nào tôi có thể hỏi trường hợp SQL đó trên máy tính của anh ta không?" nơi He = người dùng. –

3

Bạn có thực sự có quyền đăng nhập vào tất cả các trường hợp (s) của SQL Server? Nếu bạn có thể thực hiện sp_helpserver hoặc @@ servername và so sánh tên được trả về với Environment.MachineName.

Nếu bạn không có quyền truy cập đăng nhập, bạn có thể viết một C# giao diện điều khiển chương trình nhỏ để trả lại tên máy chủ của mỗi trường hợp SQL Server trên mạng nội bộ:

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("============================"); 
     } 
    } 
} 
Các vấn đề liên quan