如果需要"命名实例"参数,如何连接到SQL Server的默认实例?

goo*_*ate 12 sql-server-express sql-server-2008

我正在安装一些软件,我需要告诉它使用SQL Server的默认实例,但是Installshield GUI坚持要输入命名实例的信息.

目标SQL Server是版本2008R2

我希望有一个干净的黑客,我可以使用,如"." 或"默认",但我还没有猜到.我也尝试过MSSQLSERVER,但这也没用.

Joe*_*lli 9

运行此查询:

SELECT @@SERVERNAME + '\' + @@SERVICENAME AS InstanceName
Run Code Online (Sandbox Code Playgroud)

并将结果用作实例名称.


Mat*_*att 3

所有 SQL Server 实例都存储在Windows 注册表中。您可以使用 Windows 工具查询注册表C:\Windows\System32\Regedt32.exe并在那里浏览/搜索,您可以使用C#(请参阅此处的示例 1甚至 T-SQL(也称为 Transact-SQL)等语言来完成此操作。

在这个答案中,我将向您展示如何使用T-SQL来做到这一点。使用我在此处找到的此脚本来确定 ServerName、InstanceName、HostName 和 PortNumber:

set nocount on
Declare @key Varchar(100), @PortNumber varchar(20)

if charindex('\',CONVERT(char(20), SERVERPROPERTY('servername')),0) <>0 begin
    set @key = 'SOFTWARE\MICROSOFT\Microsoft SQL Server\'+@@servicename+'\MSSQLServer\Supersocketnetlib\TCP'
end else begin
    set @key = 'SOFTWARE\MICROSOFT\MSSQLServer\MSSQLServer\Supersocketnetlib\TCP'
end

EXEC master..xp_regread @rootkey = 'HKEY_LOCAL_MACHINE', @key = @key, 
     @value_name = 'Tcpport', @value = @PortNumber OUTPUT
SELECT  CONVERT(char(20), SERVERPROPERTY('servername')) ServerName,
        CONVERT(char(20), SERVERPROPERTY('InstanceName')) InstanceName,
        CONVERT(char(20), SERVERPROPERTY('MachineName')) as HostName, 
        convert(varchar(10), @PortNumber) PortNumber
Run Code Online (Sandbox Code Playgroud)

如果InstanceNameis null,则意味着没有配置命名实例,那么您有两个非独占选项:

  1. 指定ServerName访问默认实例
    - 或 -
  2. 使用Sql Server 配置管理器 -> SQL Native Client XX.Y 配置 -> 别名来定义别名。例如:
    定义_别名
    Inst1将为本地 SQL 服务器 设置别名。指定(local)\Inst1,1433访问它。当然,(local)你也可以使用ServerName来代替。

    重要提示:设置别名后,需要重新启动相关实例的SQL服务或重新启动PC,否则将无法立即访问。如果您使用的端口不是默认端口 1433,则可能需要打开本地防火墙才能使其正常工作。

注意:如果开始菜单中没有 SQL Server 配置管理器,则可以在 C:\Windows\System32 中找到它。查找SqlServerManagerXX.msc(其中XX 是SQL 版本,例如XX=11 或XX=13)。