我正在研究 SQL Server 中设备/资产数据库的一个相当复杂的方面,并希望寻求帮助。我将在这里尝试专注于一个问题,然后针对另一个问题提出一个单独的问题。
我有一个称为设备tblEquipment
的表和一个需要对设备集合执行的所需操作的表(tblActionsRequired
),为了这个问题,相关字段是:
tblEquipment
:EquipmentID, BasedAtID, AreaID
tblRequiredActions
:AllSites (bit), BasedAtID, AreaID
因此,您的想法tblRequiredActions
是,您会说站点 A 的所有设备都需要经常检查。区域是一个地点的特定房间或办公室等。因此,如果 AllSites 为真,则该操作适用于公司范围内的所有设备,如果为假,则需要 BasedAtID(用于站点),如果您想进一步缩小范围,AreaID 是可选的。
所以现在的问题是根据这三个字段提取哪些动作应该应用于哪些设备。
我现在所拥有的是我认为可能有效的方法,但我正在努力验证我的结果,因为还有其他因素也让我感到困惑,所以如果我完全走错了路,我真的很感激一些确认或指导!我不想走存储过程和 if 块或联合的路线,因为还有多个其他维度需要用类似的原则来覆盖,我最终会编写一个非常复杂的过程,这将是一场噩梦. 谢谢!!
SELECT
dbo.tblActionsRequired.ActionID, dbo.tblEquipment.EquipmentID
FROM
dbo.tblEquipment
INNER JOIN
dbo.tblActionsRequired ON dbo.tblActionsRequired.AllSites = 'True'
OR dbo.tblEquipment.AreaID IS NULL
AND dbo.tblEquipment.BasedAtID = dbo.tblActionsRequired.BasedAtID
OR dbo.tblEquipment.AreaID IS NOT NULL
AND dbo.tblEquipment.AreaID = dbo.tblActionsRequired.AreaID