想知道是否可以使用存储过程获取服务器的mac地址? 我做了一些搜索,但一无所获。这是使用SQL2008。
更新
不幸的是,使用newsequentialid()的答案可能会返回错误
如果服务器上有VMWare,则为MacAddress。
答案 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