如何找到未安装 SSMS 的 SQL Server 版本?

Sea*_*ins 21 sql-server

如何在没有安装管理工作室的情况下找出安装了哪个版本?我有一台用作另一个软件的许可证管理器的服务器。在调查高 RAM 使用率警报后,我发现sqlservr.exe进程占用了近 2 GB 的 RAM。

我查看了程序菜单,发现安装了配置管理器,否则,它是非常简单的。我点击了 EXE 文件的属性并找到了 10.50.1600.1,但是我没有找到任何地方说明它是 Express、Dev、STN、ENT 等。

如果我不得不猜测,这是一个快速版本,但我想知道是否有明显的告示标志。

更新:@Bob - 该文件告诉我我所知道的,而不是版本。

@valo - 运行该命令时出现以下错误,并且确实验证了命名管道已启用:

HResult 0x35,级别 16,状态 1 命名管道提供程序:无法打开与 SQL Server [53] 的连接。Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:建立与 SQL Server 的连接时发生与网络相关或实例-> 特定的错误。未找到或无法访问服务器。检查实例名称是否正确以及 SQL Server 是否配置为允许远程连接。有关详细信息,请参阅 SQL Server 联机丛书。 Sqlcmd:错误:Microsoft SQL Server Native Client 10.0:登录超时已过期。

@thomas -在我问这个问题之前,我注意到了Stock Keeping Unit Name,但这似乎太简单了,我想我最初的怀疑是正确的。

小智 23

你可以试试命令行工具:

C:\>sqlcmd -S [SERVER] -d [DB_NAME] -E -Q "SELECT @@VERSION"
Run Code Online (Sandbox Code Playgroud)


Bob*_*eri 19

如果 SQL Server 服务正在运行(根据您的描述,它正在运行)请检查 SQL Server 错误日志。您不需要安装 SSMS 来执行此操作,因为它只是一个文本文件。文件位置可能因安装方式而异,但联机丛书在此处显示默认位置

日志中的第一个条目应包含版本/版本信息。

编辑:尽管在上述问题中有评论,但这肯定会告诉您版本:

2014-06-08 00:05:00.050 spid158      Microsoft SQL Server 2012 (SP1) - 11.0.3381.0 (X64) 

Aug 23 2013 20:08:13 

Copyright (c) Microsoft Corporation

Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
Run Code Online (Sandbox Code Playgroud)


Tho*_*ger 19

这可以通过 WMI 完成(在我下面的示例中通过 PowerShell 访问)。我所做的只是通过SqlServiceAdvancedProperty类查看 SQL Server 服务的属性(“SKUNAME”)。请注意,有一些特定于环境的变量需要在代码顶部进行相应设置。

$ComputerName = "YourComputerName"
$ServiceName = 'YourEngineServiceName'
$PropertyName = "SKUNAME"

# retrieve the most current version of the ComputerManagement namespace
#
$ComputerManagementNamespace =
    (Get-WmiObject -ComputerName $ComputerName -Namespace "root\microsoft\sqlserver" -Class "__NAMESPACE" |
        Where-Object {$_.Name -like "ComputerManagement*"} |
        Select-Object Name |
        Sort-Object Name -Descending |
        Select-Object -First 1).Name
 
if ($ComputerManagementNamespace -eq $null) {
    Write-Error "ComputerManagement namespace not found"
}
else {
    $ComputerManagementNamespace = "root\microsoft\sqlserver\" + $ComputerManagementNamespace
} 

# get the property and its value
#
Get-WmiObject -ComputerName $ComputerName -Namespace $ComputerManagementNamespace -Class "SqlServiceAdvancedProperty" |
    Where-Object {
        $_.ServiceName -eq $ServiceName -and
        $_.PropertyName -eq $PropertyName
    } |
    Select-Object @{Name = "ComputerName"; Expression = { $ComputerName }},
        ServiceName,
        @{Name = "PropertyValue"; Expression = {
            if ($_.PropertyValueType -eq 0) {
                $_.PropertyStrValue
            }
            else {
                $_.PropertyNumValue
            }
        }}
Run Code Online (Sandbox Code Playgroud)

同样,可以直接在 SQL Server 配置管理器工具中找到相同的信息。打开后,右键单击您的 SQL Server 服务并进入Properties。然后单击高级选项卡并查看库存单位名称键。在那里你会找到你正在使用的版本。


Sol*_*zky 13

快速回答

只需运行以下命令:

{InstanceHome}\MSSQL\Binn\sqlservr.exe -v [-s InstanceName]
Run Code Online (Sandbox Code Playgroud)

NOTE ABOUT SQL Server Express LocalDB: LocalDB can only be determined by the
existence of the following folder:

C:\Program Files\Microsoft SQL Server\{SQL Server Version: 110, 120, etc}\LocalDB\Binn

Running "sqlserver.exe -v" doesn't help as it reports as being "Developer Edition", and
searching the Registry it reports as being "Express Edition".

这种方法总是有效,不像其他解决方案在以下情况下不起作用:

  • 您不想编写程序(例如 PowerShell)?
  • 尚未安装客户端工具(需要使用 SQLCMD.EXE)?
  • 要么没有 SQL Server 日志文件,要么没有包含任何启动/重新启动事件的日志文件?
  • SQL Server 没有运行(因此SELECT @@VERSION;不是一个选项)?

示例 1
如果您只安装了一个 Instance,则不需要使用-s开关:

C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn>sqlservr.exe -v
Run Code Online (Sandbox Code Playgroud)

返回:

2015-08-01 11:40:11.63 Server      Logging to event log is disabled. Startup option '-v' is supplied, either from the registry or the command prompt.
2015-08-01 11:40:11.63 Server      Microsoft SQL Server 2012 - 11.0.5343.0 (X64)
        May  4 2015 19:11:32
        Copyright (c) Microsoft Corporation
        Developer Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )

2015-08-01 11:40:11.63 Server      (c) Microsoft Corporation.
2015-08-01 11:40:11.63 Server      All rights reserved.
2015-08-01 11:40:11.63 Server      Server process ID is 3824.
2015-08-01 11:40:11.63 Server      System Manufacturer: '{CompanyName}', System Model: '{ModelNumber}'.
2015-08-01 11:40:11.63 Server      Authentication mode is MIXED.
2015-08-01 11:40:11.63 Server      The service account is '{AccountName}'. This is an informational message; no user action is required.
2015-08-01 11:40:11.63 Server      SQL Server shutdown has been initiated
Run Code Online (Sandbox Code Playgroud)

示例 2
如果您在机器上安装了多个实例,您还需要使用-s开关来指定您感兴趣的实例,否则它可以混合版本信息:

C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS2014\MSSQL\Binn>sqlservr.exe -v
       -s SQLEXPRESS2014
Run Code Online (Sandbox Code Playgroud)

返回:

2015-08-01 12:01:13.13 Server      Logging to event log is disabled. Startup option '-v' is supplied, either from the registry or the command prompt.
2015-08-01 12:01:13.13 Server      Microsoft SQL Server 2014 - 12.0.4213.0 (X64)
        Jun  9 2015 12:06:16
        Copyright (c) Microsoft Corporation
        Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )

2015-08-01 12:01:13.13 Server      UTC adjustment: -4:00
2015-08-01 12:01:13.13 Server      (c) Microsoft Corporation.
2015-08-01 12:01:13.13 Server      All rights reserved.
2015-08-01 12:01:13.13 Server      Server process ID is 1712.
2015-08-01 12:01:13.13 Server      System Manufacturer: '{CompanyName}', System Model: '{ModelNumber}'.
2015-08-01 12:01:13.13 Server      Authentication mode is WINDOWS-ONLY.
2015-08-01 12:01:13.13 Server      The service account is '{AccountName}'. This is an informational message; no user action is required.
2015-08-01 12:01:13.13 Server      SQL Server shutdown has been initiated
Run Code Online (Sandbox Code Playgroud)

附加信息

确定程序版本信息的最快、最简单和最可靠的方法就是简单地从程序中请求该信息。大多数程序(*.COM*.EXE)都有一个命令行开关/标志/参数/选项/dely-ma-bob,将显示帮助和/或版本信息。

根据程序本身,命令行开关将带有以下前缀之一:

  • [无/nada]
  • ——
  • ——
  • /

而且,同样取决于程序本身,命令行开关将是以下之一:

  • 最常见的:
    • v
    • 版本
  • 有时包含在一般帮助信息中:
    • ?
    • H
    • 帮助

{ 上面显示的 SQL Server 示例 }

另一方面,命令行实用程序 SQLCMD.EXE 使用-v开关将变量值传递到 SQL 脚本中,因此它仅在其常规信息显示中显示版本信息:

C:\>sqlcmd /?
Microsoft (R) SQL Server Command Line Tool
Version 11.0.2100.60 NT x64
Copyright (c) 2012 Microsoft. All rights reserved.

usage: Sqlcmd            [-U login id]          [-P password]
  [-S server]            [-H hostname]          [-E trusted connection]
  ...
  [-v var = "value"...]  ...
  ...
  [-? show syntax summary]
Run Code Online (Sandbox Code Playgroud)

但是,记事本只有非常有限的命令行开关集,并且没有一个显示版本信息。


替代的,没有大惊小怪的方法:

  • 检查注册表:

    项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\{VersionNumber}\Tools\Setup
    Name: Edition

    • 如果您知道版本号(例如 SQL Server 2012 = 110、SQL Server 2014 = 120 等),则可以通过在命令提示符下运行以下命令来专门针对它的版本:

      REG QUERY "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\{VersionNumber}\Tools\Setup" /v /e /f Edition
      
      Run Code Online (Sandbox Code Playgroud)

      返回一个类似于以下内容的条目:

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\110\Tools\Setup
          Edition    REG_SZ    Developer Edition
      
      Run Code Online (Sandbox Code Playgroud)
    • 如果您想查看安装的版本,请在命令提示符下运行以下命令:

      REG QUERY "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server" /s /v /e /f Edition
      
      Run Code Online (Sandbox Code Playgroud)

      返回一个或多个类似于上面显示的条目和以下条目:

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11E.LOCALDB\Setup
          Edition    REG_SZ    Express Edition
      
      Run Code Online (Sandbox Code Playgroud)
  • 查看安装日志:

    C:\Program Files\Microsoft SQL Server\{SQL Server 版本:110、120 等}\Setup Bootstrap\Log\{date_time}\Detail.txt

    对于字符串“IsExpressSku”:

    (03) 2014-09-05 16:53:44 SQLEngine: --EffectiveProperties: IsExpressSku = True