Cách lấy tên phiên bản hiện tại từ T-SQL


90

Làm cách nào để lấy máy chủ SQL Server và tên phiên bản của kết nối hiện tại, sử dụng tập lệnh T-SQL?


Câu trả lời được chấp nhận là đúng. SELECT @@SERVERNAMEtạo ra kết quả cần thiết để kết nối bằng cách sử dụng sqlcmd -S. Nếu nó là phiên bản MSSQLSERVER mặc định, thì nó phải-không- được chỉ định trong tham số -S. Đây là phiên bản dành cho nhà phát triển 14.0.2002.14 2017, 64-bit.
sáng

Câu trả lời:


165

Chỉ cần tìm thấy câu trả lời, trong câu hỏi SO này (theo nghĩa đen, bên trong câu hỏi, không phải bất kỳ câu trả lời nào):

SELECT @@servername

trả về tên máy chủ \ instance với điều kiện đây không phải là trường hợp mặc định

SELECT @@servicename

trả về tên phiên bản, ngay cả khi đây là tên mặc định (MSSQLSERVER)


1
@blasto, đó dường như là hành vi khi phiên bản là mặc định tại máy chủ. Hãy thử với một phiên bản được đặt tên. Kiểm tra cái này: technet.microsoft.com/en-us/library/ms187944.aspx
Guillermo Gutiérrez

10
Không chính xác, sử dụng @@ servername có thể cho bạn câu trả lời sai. CHỌN CHUYỂN ĐỔI (sysname, SERVERPROPERTY ('servername')) là câu trả lời đúng. @@ ServerName báo cáo tên cụm SQL, trong khi serverproperty ('tên máy chủ') báo cáo tên cụm Windows. Bạn cần tên cụm Windows để kết nối với db của mình (Tên cụm Windows có thể khác với tên cụm SQL; Điều này thường xảy ra khi bạn cài đặt phiên bản sql-server mới trên một máy khác (@@ servername = Environment.MachineName) và muốn giữ lại tên cũ để không phải thay đổi tất cả các cấu hình).
Stefan Steiger

1
@StefanSteiger Câu trả lời được chấp nhận của câu hỏi SO được liên kết cho biết giải pháp bạn đã trình bày, nhưng các nhận xét cho thấy rằng nó không hoạt động với một số người.
Đã thử nghiệm vào

17

Còn cái này thì sao:

EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
                   @key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
                   @value_name='MSSQLSERVER'

Điều này cũng sẽ nhận được tên cá thể. nullnghĩa là phiên bản mặc định:

SELECT SERVERPROPERTY ('InstanceName')

http://technet.microsoft.com/en-us/library/ms174396.aspx


10
SELECT SERVERPROPERTY ('InstanceName') cho tôi điểm NULL.
Steam ngày

4
thay vào đó hãy sử dụng CHỌN CHUYỂN ĐỔI (tên máy chủ, máy chủ ('tên máy chủ'));
Stefan Steiger

1
@Steam: Có thể vì nó là phiên bản mặc định.
Stefan Steiger

10

SELECT @@servername sẽ cung cấp cho bạn dữ liệu như server/instanceName

Để chỉ nhận được, instanceNamebạn nên chạy select @@ServiceNametruy vấn.


Đầu tiên, bạn có dấu gạch chéo sai cách. Dạng đúng là "server \ instance". Thứ hai, không phải lúc nào @@ servername sẽ cung cấp cho bạn cả máy chủ VÀ cá thể vì khi chỉ có một cá thể duy nhất, nó sẽ chỉ trả về "máy chủ".
Robino

8

Tôi đã tìm thấy cái này:

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

Điều đó sẽ cung cấp cho bạn danh sách tất cả các phiên bản được cài đặt trong máy chủ của bạn.


Các ServerNametài sản của SERVERPROPERTYhàm và @@SERVERNAMEtrả về thông tin tương tự. Các ServerNamebất động sản cung cấp máy chủ và instance name Windows mà cùng nhau tạo nên dụ máy chủ độc đáo. @@SERVERNAMEcung cấp tên máy chủ cục bộ hiện được định cấu hình.

Và ví dụ của Microsoft cho máy chủ hiện tại là:

SELECT CONVERT(sysname, SERVERPROPERTY('servername'));

Tình huống này hữu ích khi có nhiều phiên bản SQL Server được cài đặt trên máy chủ Windows và máy khách phải mở một kết nối khác đến cùng một phiên bản được kết nối hiện tại sử dụng.


CHỌN CHUYỂN ĐỔI (sysname, SERVERPROPERTY ('servername')); là câu trả lời đúng
Stefan Steiger

8

Tại sao chỉ dừng lại ở tên cá thể? Bạn có thể kiểm kê môi trường SQL Server của mình bằng cách sau:

SELECT  
    SERVERPROPERTY('ServerName') AS ServerName,  
    SERVERPROPERTY('MachineName') AS MachineName,
    CASE 
        WHEN  SERVERPROPERTY('InstanceName') IS NULL THEN ''
        ELSE SERVERPROPERTY('InstanceName')
    END AS InstanceName,
    '' as Port, --need to update to strip from Servername. Note: Assumes Registered Server is named with Port
    SUBSTRING ( (SELECT @@VERSION),1, CHARINDEX('-',(SELECT @@VERSION))-1 ) as ProductName,
    SERVERPROPERTY('ProductVersion') AS ProductVersion,  
    SERVERPROPERTY('ProductLevel') AS ProductLevel,
    SERVERPROPERTY('ProductMajorVersion') AS ProductMajorVersion,
    SERVERPROPERTY('ProductMinorVersion') AS ProductMinorVersion,
    SERVERPROPERTY('ProductBuild') AS ProductBuild,
    SERVERPROPERTY('Edition') AS Edition,
    CASE SERVERPROPERTY('EngineEdition')
        WHEN 1 THEN 'PERSONAL'
        WHEN 2 THEN 'STANDARD'
        WHEN 3 THEN 'ENTERPRISE'
        WHEN 4 THEN 'EXPRESS'
        WHEN 5 THEN 'SQL DATABASE'
        WHEN 6 THEN 'SQL DATAWAREHOUSE'
    END AS EngineEdition,  
    CASE SERVERPROPERTY('IsHadrEnabled')
        WHEN 0 THEN 'The Always On Availability Groups feature is disabled'
        WHEN 1 THEN 'The Always On Availability Groups feature is enabled'
        ELSE 'Not applicable'
    END AS HadrEnabled,
    CASE SERVERPROPERTY('HadrManagerStatus')
        WHEN 0 THEN 'Not started, pending communication'
        WHEN 1 THEN 'Started and running'
        WHEN 2 THEN 'Not started and failed'
        ELSE 'Not applicable'
    END AS HadrManagerStatus,
    CASE SERVERPROPERTY('IsSingleUser') WHEN 0 THEN 'No' ELSE 'Yes' END AS InSingleUserMode,
    CASE SERVERPROPERTY('IsClustered')
        WHEN 1 THEN 'Clustered'
        WHEN 0 THEN 'Not Clustered'
        ELSE 'Not applicable'
    END AS IsClustered,
    '' as ServerEnvironment,
    '' as ServerStatus,
    '' as Comments

1
Good Stuff Nate, tôi có một tập lệnh Khoảng không quảng cáo nâng cao hơn tương tự cũng làm như vậy. liên hệ với tôi để có bản sao qua email ... Tập lệnh sẽ không được chú trọng cho chủ đề này.
Hank Freeman

2

Để nhận danh sách máy chủ và phiên bản mà bạn đã kết nối:

select * from Sys.Servers

Để nhận danh sách cơ sở dữ liệu mà máy chủ được kết nối có:

SELECT * from sys.databases;

1

Chỉ để thêm một số làm rõ cho các truy vấn đăng ký. Họ chỉ liệt kê các trường hợp của bitness phù hợp (32 hoặc 64) cho trường hợp hiện tại.

Khóa đăng ký thực tế cho các phiên bản SQL 32 bit trên hệ điều hành 64 bit là:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server

Bạn có thể truy vấn điều này trên phiên bản 64 bit để nhận tất cả các phiên bản 32 bit. Phiên bản 32-bit dường như bị hạn chế đối với Wow6432Node nên không thể đọc cây đăng ký 64-bit.


0

một phương pháp khác để tìm tên Phiên bản- Nhấp chuột phải vào Tên cơ sở dữ liệu và chọn Thuộc tính, trong phần này bạn có thể xem các thuộc tính kết nối ở góc trái xuống, nhấp vào đó sau đó bạn có thể thấy tên Phiên bản.

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.