【问题标题】:Getting SQL Server instance name from tcp port number从 tcp 端口号获取 SQL Server 实例名称
【发布时间】:2020-11-25 05:38:27
【问题描述】:

我有一个场景,我使用 -q 选项来更改 SQL Server 实例的排序规则。命令如下:

 sqlservr.exe -m -T4022 -T3659 -s"SQLexpress" -q"SQL_Latin1_General_CP1_CI_AI"

上述命令完美运行,其中我的实例名称为“.\SQLExpress”。但是如果我想使用带有TCP端口号的实例名称,例如“.,52407”,那么我该如何执行上面的命令,因为我得到以下错误:

SQL 服务器

您的 SQL Server 安装已损坏或已被篡改(错误:实例名称超过最大长度)。请卸载然后重新运行安装程序以更正此问题

我想从这个端口号获取实例名称来解决这个问题。是否可以通过任何查询从 TCP 端口号获取实例名称?或者有没有其他方法可以通过TCP端口号来执行上述命令?

【问题讨论】:

    标签: sql-server tcp-port sql-server-collation


    【解决方案1】:

    以下一段代码可以处理上述情况:

    If($ServerInstanceName -like "*,*")
    {
    Write-Host "SQL Server Instance Name containts TCP Port Number"
    $SQLQuery=@"
               SET NOCOUNT ON
               Declare @key Varchar(100), @PortNumber varchar(100)
               if charindex('\',CONVERT(varchar(200), 
               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(varchar(200), SERVERPROPERTY('servername')) AS ServerName
             "@
    $ServerInstanceName = (Invoke-Sqlcmd -ServerInstance 
    $ServerInstanceName -Database 'master' -Query $SQLQuery).ServerName
    
    Write-Host "Compatible ServerName (without TCP Port) to change its Collation:" $ServerInstanceName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      相关资源
      最近更新 更多