如何确定已安装的SQL Server实例及其版本?

时间:2020-03-06 14:47:56  来源:igfitidea点击:

我正在尝试确定我已安装(手动或者以编程方式)安装的哪些sql server / sql express实例,但是所有示例都告诉我运行一个SQL查询来确定这一点,并假定我已经连接到特定实例。

解决方案

我们可以查询此注册表值以直接获取SQL版本:

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

或者,我们可以查询实例名称,然后将sqlcmd与我们想要的实例名称一起使用:

要查看实例名称:

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

然后执行以下命令:

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

如果我们使用的是C ++,则可以使用此代码获取注册表信息。

SQL Server浏览器服务http://msdn.microsoft.com/zh-cn/library/ms181087.aspx

安装的所有实例都应显示在Microsoft管理控制台的"服务"管理单元中。要获取实例名称,请转到开始|。奔跑键入Services.msc,然后查找带有" Sql Server(实例名称)"的所有条目。

在命令行中:

SQLCMD -L

或者

OSQL -L

(注意:必须为大写L)

这将列出我们网络上安装的所有sql服务器。我们可以设置一些配置选项,以防止SQL Server显示在列表中。去做这个...

在命令行中:

svrnetcn

在启用的协议列表中,选择" TCP / IP",然后单击属性。有一个"隐藏服务器"复选框。

如果我们只想查看当前登录到的计算机上已安装了什么,我认为最直接的手动过程是打开SQL Server配置管理器(从"开始"菜单),该管理器将显示所有SQL服务(以及(是否运行)该硬件上的仅SQL服务)。假设使用SQL Server 2005或者更高版本; dotnetengineer建议使用服务管理控制台将向我们显示所有服务,并且应始终可用(例如,如果我们正在运行SQL Server的早期版本)。

但是,如果我们正在寻找更广泛的发现过程,则可以考虑使用第三方工具(例如SQLRecon和SQLPing),这些工具将扫描网络并生成在它们有权访问的任何服务器上找到的所有SQL Service实例的报告。自从我使用这样的工具已经有一段时间了,但是我对它们的发现感到惊讶(即,一些我不知道存在的实例)。 YMMV。我们可以通过Google获得详细信息,但我认为该页面具有相关下载:http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx

我有同样的问题。 " osql -L"命令仅显示服务器列表,但没有实例名称(仅显示我本地SQL Sever的实例)。
使用Wireshark的sqlbrowser.exe(可以在SQL安装的共享文件夹中找到),找到了解决我的问题的方法。

本地实例通过注册表项解析。远程实例通过UDP广播(端口1434)和SMB进行解析。
使用" sqlbrowser.exe -c"列出请求。

我的配置使用1个物理和3个虚拟网络适配器。
如果我使用" osql -L"命令,则sqlbrowser将显示来自一个虚拟适配器(位于另一个网段中)的请求,而不是来自物理适配器的请求。
osql通过其指标选择adpater。我们可以使用"路由打印"命令查看指标。
对于我的配置,路由表显示的虚拟适配器的度量标准比物理适配器的度量标准低。因此,我通过在高级网络设置中取消选择自动度量来更改网络属性中的接口度量。
osql现在使用物理适配器。