Я пытаюсь разобраться с большим набором хранимых процедур базы данных, которые я поддерживаю, и я пришел к чему-то запутанному. Я не могу сказать, содержит ли он избыточный/бесполезный код, или если мне не хватает какого-то нюанса, поскольку я все еще только промежуточный на языке SQL. Вот часть кода вопроса:Оператор SQL CASE, один результат кажется недостижимым
UPDATE #NewValues
SET ValidNumber = CASE WHEN SP.ModelNumber IS NULL THEN 0
ELSE 1
END
FROM #NewValues NV
LEFT OUTER JOIN Stage.Products SP
ON NV.SKU = SP.SKU
AND (NV.ModelNumber = SP.ModelNumber OR NV.UPC = SP.ModelNumber)
WHERE NV.SKU IN (
SELECT NV.SKU
FROM #NewValues NV
INNER JOIN Stage.Products SP
ON NV.SKU = SP.SKU
AND (NV.ModelNumber = SP.ModelNumber OR NV.UPC = SP.ModelNumber)
WHERE NV.ValidNumber = 1
)
От работы через это, мне кажется, как будто нет ни одного случая, в котором SP.ModelNumber
будет NULL, так как вложенная SELECT
заявление никогда не вернется SKUs с SP.ModelNumber
NULL результатов , Так что единственное, что может когда-либо сделать, это SET ValidNumber = 1
. Это верно? Опять же, я не уверен, что здесь происходит что-то еще, что я не могу вставить в логику, но похоже, что вложенный оператор SELECT
будет всем, что вам нужно будет использовать для достижения тех же результатов. Из-за того, как этот код позиционируется в гораздо большем запросе, у меня очень сложное время, пытаясь настроить ситуацию, которая будет соответствовать нормальному использованию, чтобы проверить это, тем более, что я не уверен, что значения ValidNumber
будут до этот раздел кода работает.
Это то, что мы назвали «Идиотским доказательством».Вы можете быть удивлены, как люди будут вводить данные самым неожиданным образом. В качестве стороннего разработчика мы должны учитывать ВСЕ виды возможных глупых способов (без обид) люди будут вводить данные. Просто побочная шутка: Вы когда-нибудь видели предупреждающую надпись на феном: «Не используйте это в душе? –
только потому, что хотя бы один из sku имеет номер модели vaild, это не означает, что все эти sku имеют действительные modelNumbers – Beth