Làm cách nào để xác định các phiên bản SQL Server đã cài đặt và các phiên bản của chúng?


224

Tôi đang cố gắng xác định phiên bản nào của máy chủ sql / sql express mà tôi đã cài đặt (theo cách thủ công hoặc lập trình) nhưng tất cả các ví dụ đều bảo tôi chạy truy vấn SQL để xác định điều này giả sử tôi đã kết nối với một phiên bản cụ thể .


1
Đây là một liên kết làm thế nào để xác định với sqlcmd msdn.microsoft.com/en-us/l

Cách tìm phiên bản máy chủ SQL của bạn (Tên máy chủ) và các phiên bản youtube.com/watch?v=DLrxFXXeLFk
mloskot

bạn có thể cho tôi biết các truy vấn SQL mà bạn đang nói đến không?
LearnByRead 12/2/2016

1
@LearnByRead Xem câu trả lời của Mohammed Ifteqar Ahmed bên dưới.
Lu-ca

2
Bạn có thể thẩm vấn sổ đăng ký: pmichaels.net/2016/02/12/ trộm
Paul Michaels

Câu trả lời:


209

Tại một dòng lệnh:

SQLCMD -L

hoặc là

OSQL -L

(Lưu ý: phải là vốn L)

Điều này sẽ liệt kê tất cả các máy chủ sql được cài đặt trên mạng của bạn. Có các tùy chọn cấu hình bạn có thể đặt để ngăn Máy chủ SQL hiển thị trong danh sách. Để làm điều này...

Tại dòng lệnh:

svrnetcn

Trong danh sách giao thức được bật, chọn 'TCP / IP', sau đó nhấp vào thuộc tính. Có một hộp kiểm cho 'Ẩn máy chủ'.


2
Tôi thích các tùy chọn dòng lệnh, nhưng tôi đã nhận được kết quả hỗn hợp khi tôi thử chúng trên hộp nhà phát triển (không nối mạng) của tôi; về cơ bản "sqlcmd -L" là cái duy nhất hoạt động và chỉ khi Dịch vụ Trình duyệt SQL Server đang chạy. Đó có phải là mong đợi?
Matt

Tôi yêu nó khi nó là SIMPLE và STRAIGHT. Tôi đã vật lộn để tìm đúng tên máy chủ để nhập phiên bản SQL Server của dịch vụ web Amazon. ThanX
Mehdi LAMRani

1
Các lệnh tuyệt vời nhưng vì một số lý do, nó đã phát hiện cá thể SQLE े trên mạng được tính toán nhưng không phát hiện ra thể hiện SQLE े trên máy cục bộ của tôi.
sparebytes

1
@sparebytes: lý do tại đây: dba.stackexchange.com/questions/18499/NH
DonBecker

Hãy thử:C:\> sqllocaldb i
Contango

82

Bạn có thể truy vấn giá trị đăng ký này để lấy phiên bản SQL trực tiếp:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\Tools\ClientSetup\CurrentVersion

Ngoài ra, bạn có thể truy vấn tên đối tượng của mình và sau đó sử dụng sqlcmd với tên đối tượng mà bạn muốn:

Để xem tên ví dụ của bạn:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names

Sau đó thực hiện điều này:

SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')

Nếu bạn đang sử dụng C ++, bạn có thể sử dụng mã này để lấy thông tin đăng ký.


( 'productversion'), SERVERPROPERTY ( 'productlevel'), SERVERPROPERTY ( 'phiên bản') cho thấy chỉ máy chủ, chỉ chạy một nhưng không phải trường hợp hoặc các máy chủ được cài đặt nhưng dừng lại
Gennady Vanin Геннадий Ванин

Cảm ơn, các truy vấn đã làm việc cho tôi. Tôi đã có một máy và muốn biết phiên bản mặc định và phiên bản SQL Express là 2008 và 2008 R2. Tôi đã kết nối với từng phiên bản và chạy truy vấn và nó đã cho tôi một số phiên bản. Googling các số sau đó là dễ dàng.
Meligy

3
Lưu ý, có vẻ như "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ <version> \ Tools \ Client Setup \ CurrentVersion" và "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ Instance Name" hiển thị trong phần 32 bit của đăng ký, trong khi đường dẫn thực tế đến ví dụ: "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ <instancename>" hiển thị trong Hive 64 bit.
NGaida

Sổ đăng ký là định nghĩa nguồn của phần mềm được cài đặt. Giải pháp của bạn cho phép tôi truy cập trực tiếp vào nguồn, thay vì sử dụng công cụ CLI, cuối cùng sử dụng các giá trị đăng ký hoặc snap-in MMC cũng sử dụng sổ đăng ký. Hoàn hảo
barrypicker

76

Tất cả các phiên bản được cài đặt sẽ hiển thị trong Snap-In Dịch vụ trong Bảng điều khiển Microsoft Management. Để có được tên ví dụ, đi đến Bắt đầu | Chạy | gõ Services.msc và tìm tất cả các mục có "Máy chủ Sql (Tên trường hợp)".


13
Lệnh PowerShell tương đương:Get-Service | ?{ $_.Name -like "MSSQL*" }
orad

2
Máy tính của tôi hiển thị MSSQL $ SQLEXPRESS đang chạy với tên hiển thị SQL Server (SQLEXPRESS) .... nhưng làm cách nào để nhập tên này vào tên máy chủ? Kết nối kiểm tra cho thấy các lỗi như ... một lỗi cụ thể liên quan đến mạng hoặc xảy ra khi cố gắng kết nối với máy chủ sql
webzy 6/2/2016

47

- Truy vấn T-SQL để tìm danh sách các Trường hợp được cài đặt trên máy

DECLARE @GetInstances TABLE
( Value nvarchar(100),
 InstanceNames nvarchar(100),
 Data nvarchar(100))

Insert into @GetInstances
EXECUTE xp_regread
  @rootkey = 'HKEY_LOCAL_MACHINE',
  @key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
  @value_name = 'InstalledInstances'

Select InstanceNames from @GetInstances 

Tốt một! Tôi chỉ nghĩ rằng nó là cần thiết để kết nối như sakhông phải là nó?
jyz

3
+1 Nguồn thông tin về các trường hợp giống như câu trả lời của Brian. Ai đó cũng có thể viết mã C # để lấy giá trị từ Windows Registry; Điều này khiến tôi nghĩ rằng câu trả lời là dư thừa trong giây lát nhưng thật tuyệt khi biết về xp_regread. #cảm ơn.
Mzn

Các kết quả truy vấn chỉ là Tên Trường hợp, Có thể thêm mức độ tương thích cho từng trường hợp vào kết quả không?
Marwan Almukh

16

Tôi biết chủ đề này hơi cũ, nhưng tôi đã xem qua chủ đề này trước khi tôi tìm thấy câu trả lời tôi đang tìm kiếm và nghĩ rằng tôi muốn chia sẻ. Nếu bạn đang sử dụng SQLE Express (hoặc localdb), có một cách đơn giản hơn để tìm tên cá thể của bạn. Tại một loại dòng lệnh:

> sqllocaldb i

Điều này sẽ liệt kê các tên dụ bạn đã cài đặt cục bộ. Vì vậy, tên máy chủ đầy đủ của bạn nên bao gồm (localdb) \ phía trước tên dụ để kết nối. Ngoài ra, sqllocaldb cho phép bạn tạo các thể hiện mới hoặc xóa chúng cũng như cấu hình chúng. Xem: Tiện ích SqlLocalDB .


11

Nếu bạn chỉ muốn xem những gì được cài đặt trên máy mà bạn hiện đang đăng nhập, tôi nghĩ rằng quy trình thủ công đơn giản nhất là chỉ mở Trình quản lý cấu hình máy chủ SQL (từ menu Bắt đầu), hiển thị tất cả các Dịch vụ SQL (và chỉ các dịch vụ SQL) trên phần cứng đó (chạy hay không). Điều này giả định SQL Server 2005 hoặc cao hơn; dotnetengineer nghị sử dụng Bảng điều khiển quản lý dịch vụ của sẽ hiển thị cho bạn tất cả các dịch vụ và luôn luôn khả dụng (ví dụ: nếu bạn đang chạy các phiên bản SQL Server trước đó).

Tuy nhiên, nếu bạn đang tìm kiếm một quy trình khám phá rộng hơn, bạn có thể xem xét các công cụ của bên thứ ba như SQLRecon và SQLPing, sẽ quét mạng của bạn và tạo báo cáo về tất cả các phiên bản Dịch vụ SQL được tìm thấy trên bất kỳ máy chủ nào mà họ có quyền truy cập. Đã được một thời gian kể từ khi tôi sử dụng các công cụ như thế này, nhưng tôi đã ngạc nhiên về những gì họ tìm thấy (cụ thể là, một số ít trường hợp mà tôi không biết đã tồn tại). YMMV. Bạn có thể Google để biết chi tiết, nhưng tôi tin rằng trang này có các bản tải xuống có liên quan: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx


1
Trình quản lý cấu hình máy chủ SQL chính xác là những gì tôi cần. Nhanh chóng và dễ dàng.
Chris

8

SQL Server cho phép các ứng dụng tìm phiên bản SQL Server trong mạng hiện tại. Lớp SqlDataSourceEnumerator hiển thị thông tin này cho nhà phát triển ứng dụng, cung cấp một DataTable chứa thông tin về tất cả các máy chủ hiển thị. Bảng trả về này chứa danh sách các phiên bản máy chủ khả dụng trên mạng khớp với danh sách được cung cấp khi người dùng cố gắng tạo kết nối mới và mở rộng danh sách thả xuống có chứa tất cả các máy chủ có sẵn trên hộp thoại Thuộc tính kết nối. Các kết quả hiển thị không phải lúc nào cũng đầy đủ. Để truy xuất bảng chứa thông tin về các phiên bản SQL Server khả dụng, trước tiên bạn phải truy xuất một liệt kê, sử dụng thuộc tính Instance / static:

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

từ msd http://msdn.microsoft.com/en-us/l Library / a6t1z9x2 (v = vs.80) .aspx


Tôi có cần chỉ định một mạng con trên miền này hoặc tên miền không, tôi có thể cập nhật lại không, tôi có thể cập nhật không
biến áp

1
Đối với những người muốn sử dụng .NET Core, SqlDataSourceEnumeratorchưa được triển khai, nhưng nằm trong danh sách sẽ được thêm theo vấn đề GitHub .
Đồi Daniel


5

Nếu bạn quan tâm đến việc xác định điều này trong một kịch bản, bạn có thể thử như sau:

sc \\server_name query | grep MSSQL

Lưu ý: grep là một phần của công cụ gnuwin32


3
Bạn có thể sử dụng findstrthay vì grepcho điều này.
Pablo Montilla

Bạn cũng có thể sử dụng, TÌM, dẫn đến truy vấn sc \\ server_name | TÌM "MSSQL"
Julio Nobre

5

Từ dòng lệnh Windows, gõ:

SC \\server_name query | find /I "SQL Server ("

Trong đó "server_name" là tên của bất kỳ máy chủ từ xa nào mà bạn muốn hiển thị các phiên bản SQL.

Điều này đòi hỏi đủ quyền của khóa học.


Không hoạt động trên máy dev của tôi, có 2008 R2 và nhiều phiên bản Express và LocalDB đang chạy.
Christoph

4

Truy vấn này sẽ giúp bạn có tên máy chủ và tên ví dụ:

SELECT @@SERVERNAME, @@SERVICENAME

3
Điều này chỉ cho bạn biết tên của cá thể hiện tại được liên kết với truy vấn thực thi. OP yêu cầu một danh sách tất cả các phiên bản được cài đặt
Jay Walker

1
Điều này không cung cấp bất kỳ thông tin nào về phiên bản máy chủ SQL nào được cài đặt
Ahmad

2

Tôi đã từng gặp vấn đề tương tự. Lệnh "osql -L" chỉ hiển thị danh sách các máy chủ nhưng không có tên đối tượng (chỉ phiên bản SQL Sever cục bộ của tôi được hiển thị). Với Wireshark, sqlbrowser.exe (có thể tìm thấy trong thư mục chia sẻ cài đặt SQL của bạn) Tôi đã tìm thấy giải pháp cho vấn đề của mình.

Ví dụ cục bộ được giải quyết bằng cách đăng ký. Các trường hợp từ xa được giải quyết bằng phát sóng UDP (cổng 1434) và SMB. Sử dụng "sqlbrowser.exe -c" để liệt kê các yêu cầu.

Cấu hình của tôi sử dụng 1 bộ điều hợp mạng vật lý và 3 ảo. Nếu tôi đã sử dụng lệnh "osql -L", sqlbrowser sẽ hiển thị một yêu cầu từ một trong các bộ điều hợp ảo (nằm trong một phân đoạn mạng khác), thay vì một vật lý. osql chọn adpater theo số liệu của nó. Bạn có thể xem số liệu với lệnh "lộ trình in". Đối với cấu hình của tôi, bảng định tuyến hiển thị số liệu thấp hơn cho bộ điều hợp ảo sau đó cho vật lý. Vì vậy, tôi đã thay đổi số liệu giao diện trong các thuộc tính mạng bằng cách bỏ chọn số liệu tự động trong cài đặt mạng nâng cao. osql hiện sử dụng bộ điều hợp vật lý.


2

Một tùy chọn nữa sẽ là chạy báo cáo khám phá SQLSERVER..để cài đặt phương tiện của sqlserver và nhấp đúp chuột vào setup.exe

nhập mô tả hình ảnh ở đây

và trong màn hình tiếp theo, đi đến các công cụ và nhấp vào báo cáo khám phá như dưới đây

nhập mô tả hình ảnh ở đây

Điều này sẽ cho bạn thấy tất cả các trường hợp có mặt cùng với toàn bộ các tính năng .. tin là một ảnh chụp nhanh trên máy tính của tôi nhập mô tả hình ảnh ở đây


1

Tôi mới cài đặt máy chủ Sql 2008, nhưng tôi không thể kết nối với bất kỳ trường hợp cơ sở dữ liệu nào. Các lệnh @G Mastros được đăng được liệt kê không có trường hợp hoạt động.

Vì vậy, tôi đã xem xét các dịch vụ và thấy rằng tác nhân máy chủ SQL đã bị vô hiệu hóa. Tôi đã sửa nó bằng cách đặt nó thành tự động và sau đó khởi động nó.


1

Tôi gặp vấn đề tương tự khi tôi đánh giá hơn 100 máy chủ, tôi có một tập lệnh được viết bằng C # để duyệt các tên dịch vụ bao gồm SQL. Khi các phiên bản được cài đặt trên máy chủ, SQL Server sẽ thêm một dịch vụ cho mỗi phiên bản với tên dịch vụ. Nó có thể khác nhau đối với các phiên bản khác nhau như 2000 đến 2008 nhưng chắc chắn có một dịch vụ với tên ví dụ.

Tôi lấy tên dịch vụ và lấy tên ví dụ từ tên dịch vụ. Đây là mã mẫu được sử dụng với Kết quả truy vấn WMI:

if (ServiceData.DisplayName == "MSSQLSERVER" || ServiceData.DisplayName == "SQL Server (MSSQLSERVER)")
            {
                InstanceData.Name = "DEFAULT";
                InstanceData.ConnectionName = CurrentMachine.Name;
                CurrentMachine.ListOfInstances.Add(InstanceData);
            }
            else
                if (ServiceData.DisplayName.Contains("SQL Server (") == true)
                {
                    InstanceData.Name = ServiceData.DisplayName.Substring(
                                            ServiceData.DisplayName.IndexOf("(") + 1,
                                            ServiceData.DisplayName.IndexOf(")") - ServiceData.DisplayName.IndexOf("(") - 1
                                        );
                    InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
                    CurrentMachine.ListOfInstances.Add(InstanceData);
                }
                else
                    if (ServiceData.DisplayName.Contains("MSSQL$") == true)
                    {
                        InstanceData.Name = ServiceData.DisplayName.Substring(
                                                ServiceData.DisplayName.IndexOf("$") + 1,
                                                ServiceData.DisplayName.Length - ServiceData.DisplayName.IndexOf("$") - 1
                                            );

                        InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
                        CurrentMachine.ListOfInstances.Add(InstanceData);
                    }

0

Đây là một phương pháp đơn giản: đi đến Bắt đầu rồi Chương trình rồi Microsoft SQL Server 2005 rồi Công cụ cấu hình rồi Trình quản lý cấu hình SQL Server rồi Cấu hình mạng SQL Server 2005 sau đó Tại đây bạn có thể định vị tất cả phiên bản được cài đặt trên máy của mình.


0

Tôi biết bài đăng cũ của mình nhưng tôi đã tìm thấy một giải pháp hay với PoweShell nơi bạn có thể tìm thấy các phiên bản SQL được cài đặt trên máy cục bộ hoặc máy từ xa bao gồm phiên bản và cũng được mở rộng để có các thuộc tính khác.

$MachineName = ‘.’ # Default local computer Replace . with server name for a remote computer

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(‘LocalMachine’, $MachineName)
$regKey= $reg.OpenSubKey("SOFTWARE\\Microsoft\\Microsoft SQL Server\\Instance Names\\SQL" )
$values = $regkey.GetValueNames()
$values | ForEach-Object {$value = $_ ; $inst = $regKey.GetValue($value); 
              $path = "SOFTWARE\\Microsoft\\Microsoft SQL Server\\"+$inst+"\\MSSQLServer\\"+"CurrentVersion";
              #write-host $path; 
              $version = $reg.OpenSubKey($path).GetValue("CurrentVersion");
                          write-host "Instance" $value;
              write-host  "Version" $version}

xin chào, đây là cách tuyệt vời, tôi có thể gói cái này trong một lớp C # hay cách gọi nó từ mã
biến áp

Chào. Đây là nỗ lực đầu tiên của tôi tại powershell, vì vậy sự giúp đỡ của bạn sẽ được đánh giá cao. Tôi gặp lỗi sau nếu tôi thử và chạy tập lệnh này. Aldo này sẽ tìm thấy tất cả các máy chủ sql từ xa? Tôi đang cố gắng biên dịch một danh sách các Máy chủ SQL và cơ sở dữ liệu của chúng. Bạn không thể gọi một phương thức trên biểu thức có giá trị null. + $ value = $ regkey.GetValueNames ()
Darryl Wilson

0

Các lệnh OSQL -LSQLCMD -Lsẽ hiển thị cho bạn tất cả các trường hợp trên mạng .

Nếu bạn muốn có một danh sách tất cả các phiên bản trên máy chủ và không cảm thấy muốn thực hiện kịch bản hoặc lập trình, hãy làm điều này:

  1. Khởi động Trình quản lý tác vụ Windows
  2. Chọn hộp kiểm "Hiển thị quy trình từ tất cả người dùng" hoặc tương đương
  3. Sắp xếp các quy trình theo "Tên hình ảnh"
  4. Xác định vị trí tất cả các sqlsrvr.exehình ảnh

Các trường hợp nên được liệt kê trong cột "Tên người dùng" như MSSQL$INSTANCE_NAME.

Và tôi đã nghĩ rằng máy chủ nghèo nàn đang chạy 63 trường hợp để nhận ra rằng nó đang chạy ba (trong đó một máy hoạt động giống như một kẻ bắt nạt hoàn toàn với tải CPU ...)


0

Sẽ nhận được các phiên bản của truy vấn reg máy chủ SQL "HKLM \ Software \ Microsoft \ Microsoft SQL Server \ Instance Name \ SQL"

hoặc sử dụng SQLCMD -L


-1

Nếu trong SSMS của bạn, bạn có thể thấy dễ sử dụng hơn:

SELECT @@Version

3
Bản thân câu hỏi nói rằng họ không muốn / không thể sử dụng các truy vấn SQL để xác định phiên bản
Trotski94
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.