首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 實用 IP 相關腳本:取得客戶端 IP、MAC、IP 格式化

     編輯:關於SqlServer

1. 取得目前連線的客戶端 IP 位址

DECLARE @ip VARCHAR(20), @hst VARCHAR(20), @sql VARCHAR(100), @str VARCHAR(100);
SET @str = 'PING ' + HOST_NAME();
CREATE TABLE #tmp (aa VARCHAR(200));
INSERT #tmp EXEC master..xp_cmdshell @str;
SELECT TOP 1 @ip = REPLACE(LEFT(aa, CHARINDEX(':', aa)-1), 'Reply from ', '')
FROM #tmp WHERE aa LIKE 'reply from %:%';
DROP TABLE #tmp;
SELECT @ip AS ClientIP;

原理:PING 本機主機名,解析回應行提取 IP。需啟用 xp_cmdshell 且網路允許 ICMP。

2. 取得網卡實體位址 (MAC Address)

CREATE TABLE #tb (re VARCHAR(255));
INSERT #tb EXEC master..xp_cmdshell 'ipconfig /all';
SELECT 網卡實體位址 = SUBSTRING(re, CHARINDEX(':', re)+1, 255)
FROM #tb WHERE re LIKE '%Physical Address%';
DROP TABLE #tb;

解析 ipconfig /all 輸出,擷取 Physical Address 行後的 MAC 字串。

3. IP 位址段標準化:每三位補零並以點分隔

CREATE FUNCTION dbo.fn_FormatIP (@a VARCHAR(15))
RETURNS VARCHAR(15)
AS
BEGIN
    DECLARE @s VARCHAR(15) = '';
    WHILE CHARINDEX('.', @a) > 0
    BEGIN
        SET @s = @s + RIGHT('000' + LEFT(@a, CHARINDEX('.', @a)), 4); -- 含點號
        SET @a = RIGHT(@a, LEN(@a) - CHARINDEX('.', @a));
    END
    SET @s = @s + RIGHT('000' + @a, 3); -- 最後一段不含點
    RETURN @s;
END

測試:

SELECT dbo.fn_FormatIP('202.1.110.2');  -- 回傳 '202.001.110.002'

用途:IP 字串排序、比較、索引鍵值統一格式。

注意事項

  • xp_cmdshell 需 sysadmin 權限且伺服器啟用該選項(sp_configure 'xp_cmdshell', 1)。
  • PING 法依賴主機名解析正確,多網卡環境可能回傳非預期 IP。
  • 生產環境建議改用 CONNECTIONPROPERTY('client_net_address') (SQL 2008+) 或應用層傳遞 IP,避免啟用 xp_cmdshell 風險。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved