0

我有一个场景,我使用 -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端口号来执行上述命令?

4

1 回答 1

0

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

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
于 2020-10-23T15:05:29.373 回答