是否可以使用存储过程获取mac地址?

时间:2010-08-03 16:07:24

标签: sql-server stored-procedures

想知道是否可以使用存储过程获取服务器的mac地址? 我做了一些搜索,但一无所获。这是使用SQL2008。

更新
不幸的是,使用newsequentialid()的答案可能会返回错误 如果服务器上有VMWare,则为MacAddress。

6 个答案:

答案 0 :(得分:5)

一种有点圆的方法!

declare @t table
(
i uniqueidentifier default newsequentialid(),
m as cast(i as char(36))
)

insert into @t default values;

select
    substring(m,25,2) + '-' + 
    substring(m,27,2) + '-' + 
    substring(m,29,2) + '-' +
    substring(m,31,2) + '-' +
    substring(m,33,2) + '-' +
    substring(m,35,2) AS MacAddress
FROM @t

答案 1 :(得分:2)

我猜你需要从SQL执行shell命令来获取MAC地址。如果我没记错的话,你必须打开execute shell命令选项才能使用它。然后,您可以运行“getmac”来检索服务器上接口的MAC地址列表。你必须按照返回的文本进行操作,但这不应该太难。

答案 2 :(得分:1)

sys.sysprocesses,net_address列。对于我从SSMS的连接,它是795C70BAD9B0

sys.dm_exec_connections中没有等效项(net_address是IP地址而不是MAC地址,并且来自我的SSMS是111.222.111.222)。实际上没有sys.sysprocesses equivalent either

所以你可以在你自己的存储过程中查询sys.sysprocesses ...

答案 3 :(得分:0)

好吧,因为在Sql Server 2008中,存储过程可以包含托管代码,但是,您应该可以在技术上运行由SqlServer启动的ac#/ vb应用程序,而不是真正从中获取信息存储过程,虽然更多的是理论而不是实际差异。

答案 4 :(得分:0)

  

声明@macadd nvarchar(50)选择@ macadd = net_address       来自master.dbo.sysprocesses       program_name喜欢' SQLAgent%'和hostname = SERVERPROPERTY(' MachineName')和net_address<>' 000000000000'    - 确定MAC地址集@ macadd = SUBSTRING(@ macadd,1,2)+' - ' + SUBSTRING(@ macadd,3,2)+' - ' + SUBSTRING(@ macadd,5,2)+' - ' + SUBSTRING(@ macadd,7,2)+' - ' + SUBSTRING(@ macadd,9,2)+ ' - ' + SUBSTRING(@ macadd,11,2)    - 包括' - '在MAC地址的每两个字符之间选择@macadd

答案 5 :(得分:0)

DECLARE @IP_Address varchar(20);
DECLARE @mac_Address varchar(20);

SELECT @IP_Address=client_net_address,@mac_Address=net_address 
    FROM sys.dm_exec_connections c
    join sys.sysprocesses p on c.session_id=p.spid
    WHERE c.Session_id = @@SPID