以下は、すべてのフィールドを個別にチェックすることに基づいて、データベースに重複するエントリがあるかどうかをチェックするためのストアド プロシージャです (なぜこれを行う必要があるかは聞かないでください。このようにする必要があります)。
それは完全に簡単に聞こえますが、SP は失敗します。問題は、SP に渡される一部のパラメーターが null 値を持つ可能性があるため、SQL は「= null」ではなく「is null」と読み取る必要があることです。isnull()、case ステートメント、coalesce()、および exec() と sp_executesql を使用した動的 SQL を試しましたが、これらのいずれも実装できませんでした。これがコードです...
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