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ể .
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ể .
Câu trả lời:
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ủ'.
C:\> sqllocaldb i
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ý.
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)".
Get-Service | ?{ $_.Name -like "MSSQL*" }
- 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
sa
không phải là nó?
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 .
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
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
SqlDataSourceEnumerator
chưa được triển khai, nhưng nằm trong danh sách sẽ được thêm theo vấn đề GitHub .
Dịch vụ trình duyệt máy chủ SQL http://msdn.microsoft.com/en-us/l Library / ms181087.aspx
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
findstr
thay vì grep
cho điều này.
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.
Truy vấn này sẽ giúp bạn có tên máy chủ và tên ví dụ:
SELECT @@SERVERNAME, @@SERVICENAME
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ý.
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
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
Đ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
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ó.
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);
}
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}
Các lệnh OSQL -L
và SQLCMD -L
sẽ 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:
sqlsrvr.exe
hình ảnhCá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 ...)