Ниже приведена хранимая процедура для проверки наличия дублирующейся записи в базе данных на основе проверки всех полей по отдельности (не спрашивайте, почему я должен это делать, просто так должно быть).
Звучит совершенно просто, но SP терпит неудачу. Проблема в том, что некоторые параметры, переданные в SP, могут иметь нулевое значение, и поэтому sql должен читать «равно нулю», а не «= null». Я пробовал isnull(), операторы case, объединение() и динамический sql с exec() и sp_executesql и не смог реализовать ни один из них. Вот код...
CREATE PROCEDURE sp_myDuplicateCheck
@userId int,
@noteType char(1),
@aCode char(3),
@bCode char(3),
@cCode char(3),
@outDuplicateFound int OUT
AS
BEGIN
SET @outDuplicateFound = (SELECT Top 1 id FROM codeTable
WHERE userId = @userId
AND noteType = @noteType
AND aCode = @aCode
AND bCode = @bCode
AND cCode = @cCode
)
-- Now set the duplicate output flag to a 1 or a 0
IF (@outDuplicateFound IS NULL) OR (@outDuplicateFound = '') OR (@outDuplicateFound = 0)
SET @outDuplicateFound = 0
ELSE
SET @outDuplicateFound = 1
END