如何确定已安装的SQL Server实例及其版本?
-
02-07-2019 - |
题
我正在尝试确定我已安装的sql server / sql express的哪些实例(手动或以编程方式)但所有示例都告诉我运行SQL查询来确定这个假定我已经连接到一个特定的例子。
解决方案
在命令行:
SQLCMD -L
或
OSQL -L
(注:必须是大写字母L)
这将列出网络上安装的所有sql server。您可以设置配置选项以防止SQL Server显示在列表中。要做到这一点......
在命令行:
svrnetcn
在启用的协议列表中,选择“TCP / IP”,然后单击“属性”。 “隐藏服务器”复选框。
其他提示
您可以查询此注册表值以直接获取SQL版本:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\Tools\ClientSetup\CurrentVersion
或者,您可以查询实例名称,然后将sqlcmd与您想要的实例名称一起使用:
要查看您的实例名称:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names
然后执行:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
安装的所有实例都应显示在Microsoft管理控制台的“服务管理单元”中。要获取实例名称,请转到“开始”|运行|键入Services.msc并查找具有“Sql Server(实例名称)”的所有条目。
- 用于查找计算机上安装的实例列表的T-SQL查询
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
如果您只想查看当前登录的计算机上安装的内容,我认为最直接的手动过程是打开SQL Server配置管理器(从“开始”菜单),它显示所有SQL该硬件上的服务(以及仅 SQL服务)(运行与否)。这假定SQL Server 2005或更高版本; dotnetengineer 建议使用服务管理控制台将显示所有服务,并且应始终可用(例如,如果您运行的是早期版本的SQL Server)。
但是,如果您正在寻找更广泛的发现过程,您可以考虑第三方工具,例如SQLRecon和SQLPing,它们将扫描您的网络并构建在他们拥有的任何服务器上找到的所有SQL Service实例的报告访问。我已经使用了这样的工具已经有一段时间了,但我对他们发现的东西感到惊讶(即,我不知道的一些实例)。因人而异。您可以访问Google以获取详细信息,但我相信此页面具有相关下载: http://www.sqlsecurity.com/Tools/FreeTools/tabid/65/Default.aspx
我知道这个帖子有点旧,但在找到我正在寻找的答案之前我遇到了这个帖子,并且认为我会分享。如果您使用的是SQLExpress(或localdb),则可以使用更简单的方法查找实例名称。 在命令行输入:
> sqllocaldb i
这将列出您在本地安装的实例名称。因此,您的完整服务器名称应包含(localdb)\在要连接的实例名称前面。此外,sqllocaldb允许您创建新实例或删除它们以及配置它们。请参阅: SqlLocalDB Utility 。
SQL Server允许应用程序在当前网络中查找SQL Server实例。 SqlDataSourceEnumerator类将此信息公开给应用程序开发人员,提供包含有关所有可见服务器的信息的DataTable。此返回表包含网络上可用的服务器实例列表,该列表与用户尝试创建新连接时提供的列表相匹配,并展开包含“连接属性”对话框中所有可用服务器的下拉列表。显示的结果并不总是完整的。 要检索包含有关可用SQL Server实例的信息的表,必须首先使用shared / static Instance属性检索枚举器:
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("============================");
}
}
}
来自msdn http://msdn.microsoft的.com / EN-US /库/ a6t1z9x2(v = VS.80)的.aspx
SQL Server浏览器服务 http://msdn.microsoft.com/en-我们/库/ ms181087.aspx
在Windows命令行中,键入:
SC \\server_name query | find /I "SQL Server ("
where“server_name”是要在其上显示SQL实例的任何远程服务器的名称。
当然,这需要足够的权限。
如果您有兴趣在脚本中确定这一点,可以尝试以下方法:
sc \\server_name query | grep MSSQL
注意:grep是gnuwin32工具的一部分
我遇到了同样的问题。 “osql -L”表示“osql -L”。命令仅显示服务器列表但没有实例名称(仅显示本地SQL服务器的实例)。 使用Wireshark,sqlbrowser.exe(可以在SQL安装的共享文件夹中找到),我找到了解决问题的方法。
本地实例由注册表项解析。远程实例由UDP广播(端口1434)和SMB解析。 使用“sqlbrowser.exe -c”;列出请求。
我的配置使用1个物理网络适配器和3个虚拟网络适配器 如果我使用“osql -L”命令sqlbrowser显示来自其中一个虚拟适配器(位于另一个网段中)的请求,而不是物理请求。 osql按其度量选择adpater。您可以使用命令“route print”查看指标。 对于我的配置,路由表显示了虚拟适配器的较低度量,然后是物理。因此,我通过在高级网络设置中取消选择自动指标来更改网络属性中的接口指标。 osql现在使用物理适配器。
此查询应该为您提供服务器名称和实例名称:
SELECT @@SERVERNAME, @@SERVICENAME
我刚刚安装了Sql server 2008,但我无法连接到任何数据库实例。 @G Mastros发布的命令列出了没有活动的实例。
所以我查看了服务,发现SQL服务器代理已被禁用。我通过将其设置为自动然后启动来修复它。
当我评估100多台服务器时,我遇到了同样的问题,我有一个用C#编写的脚本来浏览由SQL组成的服务名称。当服务器上安装实例时,SQL Server会为每个具有服务名称的实例添加服务。对于不同的版本,例如2000年到2008年,它可能会有所不同,但肯定有一个带有实例名称的服务。
我从服务名称获取服务名称并获取实例名称。以下是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<*>quot;) == true)
{
InstanceData.Name = ServiceData.DisplayName.Substring(
ServiceData.DisplayName.IndexOf("<*>quot;) + 1,
ServiceData.DisplayName.Length - ServiceData.DisplayName.IndexOf("<*>quot;) - 1
);
InstanceData.ConnectionName = CurrentMachine.Name + "\\" + InstanceData.Name;
CurrentMachine.ListOfInstances.Add(InstanceData);
}
这是一个简单的方法: 去 然后开始 程序然后 然后是Microsoft SQL Server 2005 然后配置工具 然后是SQL Server配置管理器 然后是SQL Server 2005网络配置 在这里,您可以找到安装在您计算机上的所有实例。
如果你在SSMS内部,你会发现它更容易使用:
SELECT @@Version
我知道这是一个很老的帖子,但我找到了一个很好的PoweShell解决方案,你可以在本地或远程机器上找到安装的SQL实例,包括版本,也可以扩展获取其他属性。
$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 = 我知道这是一个很老的帖子,但我找到了一个很好的PoweShell解决方案,你可以在本地或远程机器上找到安装的SQL实例,包括版本,也可以扩展获取其他属性。
<*> ; $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}