一.使用Alias代替SQLServer\Instance连接数据库。
之前解决过一个客户问题,其使用SQL Alias配置的SharePoint,而通过SQLServer\Instance连接不上SQLServer(在SQL Server Management Studio中无法用实例访问)。对于我们来说需要得到SQLServer\Instance信息。
客户环境重现:
1. 创建一个带实例名的数据库,如SQLServer1\Instance1
2. 配置SQL Server监听一个指定的端口,而不使用默认动态端口(配置SQL Server Configuration Manager中Network Configuration的TCP\IP协议)
3. 停掉SQL Browser Service.
4. 配置一个通过上面端口连接数据库的Alias(在SQL Server Configuration Manager中SQL Native Client Configuration中设置)
5. 重起相应实例的服务,这是只能通过Alias连接数据库,而SQLServer1\Instance1连接不上。
6. 配置别名的目的是有更好的安全性,可以增加防火墙上的控制。
解决方法:
1. 通过Alias连接到数据库。
2. 执行T-SQL语句"SELECT @SERVERNAME"
3. 得到SQLServer1\Instance1
 
二. 使用SERVERPROPERTY得到实例名。
(1)环境描述:
如果安装SQL SERVER后又修改了系统的机器名,但SQL SERVER中的配置没有更新,这时会带来很多问题,如发布订阅无法配置,报表功能无法使用等等.。这时候需要修改SQL SERVER里的记录的系统机器名。方法为:
-- Use the Master database
USE master GO
-- Declare local variables
DECLARE @serverproperty_servername varchar(100), @servername varchar(100)
-- Get the value returned by the SERVERPROPERTY system function
SELECT @serverproperty_servername = CONVERT(varchar(100), SERVERPROPERTY('ServerName'))
-- Get the value returned by @@SERVERNAME global variable
SELECT @servername = CONVERT(varchar(100), @@SERVERNAME)
-- Drop the server with incorrect name
EXEC sp_dropserver @server=@servername
-- Add the correct server as a local server
EXEC sp_addserver @server=@serverproperty_servername, @local='local'  

SELECT @@SERVERNAME, SERVERPROPERTY('ServerName')
重起SQL Server服务。最后一句可以验证SQLServer名称和网络名称的计算机是否相同
 
(2). 区别:
SERVERPROPERTY 函数的 ServerName 属性与 @@SERVERNAME 返回相似的信息。ServerName 属性提供 Windows 服务器和实例名称,两者共同构成唯一的服务器实例。@@SERVERNAME 提供当前配置的本地服务器名称。
如果安装时未更改默认服务器名称,则 ServerName 属性和 @@SERVERNAME 返回相同的信息。可以通过执行以下过程配置本地服务器的名称:
EXEC sp_dropserver 'current_server_name';
GO
EXEC sp_addserver 'new_server_name', 'local';
GO
如果在安装时已将本地服务器名称从默认服务器名称更改为其他名称,则 @@SERVERNAME 返回更改后的新名称。(曾经遇到过这种客户问题,因此SELECT @@SERVERNAME就失效了,改为SELECT SERVERPROPERTY('ServerName'))
以下示例在 SELECT 语句中使用 SERVERPROPERTY 函数返回有关当前服务器的信息。如果 Windows 服务器安装了多个 SQL Server 实例,而且客户端必须打开另一个到当前连接所使用的同一实例连接,则此方案很有用。
SELECT CONVERT(char(20), SERVERPROPERTY('servername'));
有关别名及SQLServer中4种网络协议请参考:
有关SERVERPROPERTY请参考: