-- 远程连接服务器查询
SELECT local_net_address , local_tcp_port
FROM sys.dm_exec_connections
WHERE session_id = @@spid

-- 2008以后可以执行:
select
 SERVERPROPERTY('MachineName') AS [hostname],
isnull(SERVERPROPERTY('InstanceName'),'MSSQLSERVER') AS [实例名称],
  CONNECTIONPROPERTY('local_net_address') [IP地址],
  CONNECTIONPROPERTY('local_tcp_port') [端口地址]

-- 服务器本地读取 get Port
DECLARE       @portNumber   NVARCHAR(10)
EXEC   xp_instance_regread
@rootkey    = 'HKEY_LOCAL_MACHINE',
@key        = N'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\Tcp\IPAll',
@value_name = N'TcpPort',
@value      = @portNumber OUTPUT

SELECT [Port Number] = @portNumber

-- get IP, 服务器本地读取
DECLARE       @portNumber   NVARCHAR(30)
EXEC   xp_instance_regread
@rootkey    = 'HKEY_LOCAL_MACHINE',
@key        = N'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\Tcp\IP10',
@value_name = N'IpAddress',
@value      = @IP OUTPUT

SELECT [IP] = @IP
---------------------------------
-- 连接本地服务器通过信任TCP连接获取远程服务器IP地址,需要有信任权限

-- 修改Ad Hoc Distributed Queries设置为1

-- SELECT value FROM SYS.CONFIGURATIONS where name='Ad Hoc Distributed Queries';
DECLARE @value      sql_variant
SELECT @value=value FROM SYS.CONFIGURATIONS where name='Ad Hoc Distributed Queries';
select @value

-- 保存当前设置
-- drop table #val
-- if object_id('#val','u') is null
if not exists (select * from tempdb.dbo.sysobjects where id = object_id(N'tempdb..#VAL') and type='U')
begin
create table #val (value varchar(100))
insert into #val(value) select CONVERT(NVARCHAR(20),value) FROM SYS.CONFIGURATIONS where name='Ad Hoc Distributed Queries'
end

exec SP_CONFIGURE 'show advanced options',1
go
RECONFIGURE

EXEC sp_configure 'Ad Hoc Distributed Queries', 1  
GO  
RECONFIGURE;  
GO

-- 连接本地服务器建立远程信任连接实现分布式查询:

DECLARE @ip_address       varchar(15)
DECLARE @tcp_port         int 
DECLARE @connectionstring nvarchar(max) 
DECLARE @parm_definition  nvarchar(max)
DECLARE @command          nvarchar(max)

SET @connectionstring = N'Server=tcp:' + @@SERVERNAME + ';Trusted_Connection=yes;'
SET @parm_definition  = N'@ip_address_OUT varchar(15) OUTPUT
                        , @tcp_port_OUT   int         OUTPUT';

SET @command          = N'SELECT  @ip_address_OUT = a.local_net_address,
                                  @tcp_port_OUT   = a.local_tcp_port
                          FROM OPENROWSET(''SQLNCLI''
                                 , ''' + @connectionstring + '''
                                 , ''SELECT local_net_address
                                          , local_tcp_port
                                     FROM sys.dm_exec_connections
                                     WHERE session_id = @@spid
                                   '') as a'

EXEC SP_executeSQL @command
                 , @parm_definition
                 , @ip_address_OUT = @ip_address OUTPUT
                 , @tcp_port_OUT   = @tcp_port OUTPUT;


-- 获得服务器IP
SELECT @ip_address, @tcp_port



-- 恢复设置
DECLARE @val      varchar(100)
select @val=value from #val;
select @val

EXEC sp_configure 'Ad Hoc Distributed Queries', @val  
GO  
RECONFIGURE;  
GO


exec SP_CONFIGURE 'show advanced options',0
go
RECONFIGURE
-- 远程通过TCP方式连接到服务器:

SELECT SERVERNAME = CONVERT(NVARCHAR(128),SERVERPROPERTY('SERVERNAME'))  
,LOCAL_NET_ADDRESS AS 'IPAddressOfSQLServer' 
,CLIENT_NET_ADDRESS AS 'ClientIPAddress' 
--, NETBIOS = CONVERT(NVARCHAR(128),SERVERPROPERTY('COMPUTERNAMEPHYSICALNETBIOS'))  
--, [MAXDOP] = (SELECT VALUE_IN_USE FROM SYS.CONFIGURATIONS WHERE NAME='MAX DEGREE OF PARALLELISM')   
--, SQLMEMORY = (SELECT VALUE_IN_USE FROM SYS.CONFIGURATIONS WHERE NAME='MAX SERVER MEMORY (MB)')  
--, EDITION = CONVERT(NVARCHAR(128),SERVERPROPERTY('EDITION'))  
---, COLLATION = CONVERT(NVARCHAR(128),SERVERPROPERTY('COLLATION'))  
--, ISCLUSTERED = CONVERT(BIT,SERVERPROPERTY('ISCLUSTERED'))  
--, ISFULLTEXTINSTALLED = CONVERT(BIT,SERVERPROPERTY('ISFULLTEXTINSTALLED'))  
--, ISINTEGRATEDSECURITYONLY = CONVERT(BIT,SERVERPROPERTY('ISINTEGRATEDSECURITYONLY'))  
--, FILESTREAMCONFIGUREDLEVEL = CONVERT(TINYINT,SERVERPROPERTY('FILESTREAMCONFIGUREDLEVEL'))  
--, FILESTREAMEFFECTIVELEVEL = CONVERT(TINYINT,SERVERPROPERTY('FILESTREAMEFFECTIVELEVEL'))  
--, PRODUCTVERSION = CONVERT(NVARCHAR(128),SERVERPROPERTY('PRODUCTVERSION'))  
--, SQLCHARSETNAME = CONVERT(NVARCHAR(128),SERVERPROPERTY('SQLCHARSETNAME'))  
--, SQLSORTORDERNAME = CONVERT(NVARCHAR(128),SERVERPROPERTY('SQLSORTORDERNAME')) 
 FROM SYS.DM_EXEC_CONNECTIONS WHERE SESSION_ID = @@SPID

 select serverproperty('Edition')   as [mssql版本名称] 
 select serverproperty('InstanceName') as [mssql实例名称] 
 select serverproperty('IsClustered') as [是否配置故障转移实例]  
 select serverproperty('IsFullTextInstalled') as [是否安装全文组件]  
 select serverproperty('IsIntegratedSecurityOnly') as [是否集成安全模式]  
 select serverproperty('IsSingleUser') as [是否单用户模式检测] 
 select serverproperty('IsSyncWithBackup') as [数据库是否为发布或分发数据库]  
 select serverproperty('LicenseType') as [许可模式]  
 select serverproperty('MachineName') as [DB服务器机器名称]
 select serverproperty('NumLicenses') as [DB服务器上许可数量]
 select serverproperty('ProcessID')   as [服务器引擎在操作系统中的进程ID]
 select serverproperty('ProductVersion') as [mssql服务器软件的版本信息] 
 select serverproperty('ProductLevel')  as [db服务器软件版本级别]  
 select serverproperty('ServerName') as [返回Db服务器机器名称]