2013-01-07 58 views
2

我想確定我要連接的SQL Server是否在本地機器上。我知道有很多方法可以在連接到SQL Server時識別SQL Server的服務器\實例名稱,但有很多不同的方式可以指定服務器名稱,我不想在IP地址之間進行比較,機器名,(local)LocalHost.檢查SQL Server實例是否在本地計算機上?

有什麼在SQL Server(任何版本2000+),在那裏我可以檢查是否實例是在本地計算機上或沒有做我自己的比較?

+1

http://stackoverflow.com/questions/的重複886543/sqlconnection-is-remote-or-local-connection – mortb

+0

對於2005+也許'SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@ SPID'。沒有考慮過這是否可靠。 –

+1

[如何判斷SQL Server是本地還是遠程?](http://stackoverflow.com/questions/3925233/how-to-tell-if-sql-server-is-local-or-remote)這個給你一個替代'@@ SERVERNAME' –

回答

2
SELECT Case when HOST_NAME()= 
     Case When CharIndex('\',@@SERVERNAME)=0 then @@SERVERNAME else LEFT(@@SERVERNAME,CharIndex('\',@@SERVERNAME)-1) end 
     then 'local' else 'remote' end 

因爲@@ servername是在安裝時定義可能有所改變(甚至sp_addserver的),你希望:

SELECT Case when HOST_NAME()=SERVERPROPERTY('MachineName') then 'local' else 'remote' end 
+0

到目前爲止,我已經用'MyMachineName','(local)','localhost','''','192.168.1.100','192.168.1.100,1433'進行了測試,它效果很好。現在要測試一個命名實例... –

+0

沒有在命名實例MyMachineName \ Instance上工作 - 返回'遠程' –

+0

@Jerry Dodge無法重現什麼是HOST_NAME()和@@ SERVERNAME輸出? – bummi

0
SELECT CASE WHEN CAST(SERVERPROPERTY('MachineName') AS VARCHAR(100)) = CAST(HOST_NAME() AS VARCHAR(100)) THEN 'LOCAL' 
ELSE 'REMOTE' 
END 
相關問題