次のクエリを変更して、パラメータ化できるようにするにはどうすればよいSparePartNames
ですか?
すべての必須スペアパーツが変更されていない、つまり少なくとも1つのパーツが欠落している修理のすべてのIDを返します。
スペアパーツの数は、名前だけでなく将来変更される可能性があることに注意してください。動的SQLでストアドプロシージャを使用せずに可能ですか?そうでない場合、このSPはどのように見えるでしょうか?
編集:私はパラメータとしてリスト/配列を渡す方法を知る必要がないことに注意してください、これはSOで無数の時間に尋ねられます。私はすでにSplit
テーブル値関数も持っています。クエリを書き直して、必須の部分のリストと結合できるように(または何でも) 、少なくとも1つの部分が欠落しているすべてのレコードを見つけることができるようにするにはどうすればよいか疑問に思っています。それで、?'1264-3212,1254-2975'
のリストの代わりにのようなvarchar-parameterを使用することは可能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)
。