如何更改以下查询,以便能够参数化SparePartNames
?
它返回并非所有强制备件都已更改的所有维修 ID,即至少缺少一个零件。
请注意,备件的数量将来可能不仅名称会发生变化。是否可以不使用带有动态 SQL 的存储过程?如果不是,这个 SP 会是什么样子?
编辑:请注意,我不需要知道如何将列表/数组作为参数传递,这是在 SO 上被问到的无数时间。我也已经有了一个Split
表值函数。我只是想知道如何重写查询以能够加入(或其他)强制性部分列表,以便找到至少缺少一个部分的所有记录。那么是否可以使用 varchar 参数'1264-3212,1254-2975'
而不是列表NOT EXISTS
?如果一开始不清楚,很抱歉造成混乱。
SELECT d.idData
FROM tabData d
INNER JOIN modModel AS m ON d.fiModel = m.idModel
WHERE (m.ModelName = 'MT27I')
AND (d.fiMaxServiceLevel >= 2)
AND (d.Manufacture_Date < '20120511')
AND (NOT EXISTS
(SELECT NULL
FROM tabDataDetail AS td
INNER JOIN tabSparePart AS sp ON sp.idSparePart = td.fiSparePart
WHERE (td.fiData = d.idData)
AND (sp.SparePartName = '1264-3212'))
OR (NOT EXISTS
(SELECT NULL
FROM tabDataDetail AS td
INNER JOIN tabSparePart AS sp ON sp.idSparePart = td.fiSparePart
WHERE (td.fiData = d.idData)
AND (sp.SparePartName = '1254-2975'))
)
)
不幸的是,我不知道如何sp.SparePartName IN/NOT IN(@sparePartNames)
在这里使用。