【发布时间】:2016-07-26 18:34:46
【问题描述】:
所以我有两张桌子。一个表 (tbl1) 包含按建筑物划分的子网信息,列名称为ip_address、位置、服务器、建筑物、起始 IP、结束 IP 和子网掩码。
我有另一个表 (tbl2),其中包含名为 顶级控制台用户、计算机名称、IP 地址、计算机型号、计算机操作系统和计算机序列号的列
我想创建一个报告,列出 tbl2 中位于 tbl1 中起始 IP 和结束 IP 之间的 IP 地址。因此,例如,如果来自 tbl2 的计算机的 IP 地址为 172.16.1.4,而 tbl1 的建筑物的起始 IP 为 172.16.1.1,结束 IP 为 172.16.1.254,我希望能够在我的报告中看到这一点。
两个表中都没有类似的列,因此使用 JOIN 语句对我来说并没有真正起作用。我还在我的报告中使用参数(如果这很重要)。任何帮助将不胜感激。
更新:
我知道这很多,但它让我成功了一半。我创建了一个转换值但不知道如何调用的函数。还有指点吗??
SELECT * FROM Subnets_And_Locations,
(SELECT Computer_System_DATA.UserName00 AS Top_Console_User,
Computer_System_DATA.Name00 + '.' + Computer_System_DATA.Domain00 AS Computer_Name,
System_IP_Address_ARR.IP_Addresses0 AS IP_Address,
Computer_System_DATA.Model00 AS Model,
Operating_System_DATA.Caption00 AS Operating_System,
PC_BIOS_DATA.SerialNumber00 AS Serial_Number
FROM Computer_System_DATA
INNER JOIN Operating_System_DATA ON Computer_System_DATA.MachineID = Operating_System_DATA.MachineID
INNER JOIN System_IP_Address_ARR ON Computer_System_DATA.MachineID = System_IP_Address_ARR.ItemKey
INNER JOIN PC_BIOS_DATA ON Computer_System_DATA.MachineID = PC_BIOS_DATA.MachineID) AS Scope
WHERE Scope.IP_Address >= Subnets_And_Locations.Starting_IP AND Scope.IP_Address <= Subnets_And_Locations.Ending_IP
;
【问题讨论】:
-
我不确定是否有办法查询这样的数字范围(虽然不是 100% 肯定)。我的建议是更改 IP 地址在表中的存储方式,以使此类查询成为可能。我找到了this,它可能有助于数据的存储方式。
-
范围仅由最后 2 个八位字节或最后 3 个字节决定?
-
范围由最后 2 个八位字节决定。
标签: sql sql-server sccm