次の条件があります。SQL Where句が値渡しの場合に使用
値が@UserIdパラメータに渡された場合、それらのフィルタをフィルタリングする必要があります( )。
値が渡されない場合は、すべてのレコードを取得する必要があります。
列RecipientIdがNULLでないです。
しかし、私は値を渡しても、以下のクエリは常にすべてのレコードを返します。
私はあなたがIDにDECLARE @UserId INT
SET @UserId = 47
SELECT *
FROM Message MR
WHERE MR.CompanyId = 1
AND MR.RecipientId = @UserId
を提供するので何のidが
SELECT *
FROM Message MR
WHERE MR.CompanyId = 1
AND (
@UserId IS NULL
OR MR.RecipientId = @UserId -- OR get this one, redundant
)
なぜ提供されていない場合は、シンプルなフォームを使用することができると信じて
DECLARE @UserId INT
SET @UserId = 47
SELECT *
FROM Message MR
WHERE MR.CompanyId = 1
AND (
MR.RecipientId IS NOT NULL
OR MR.RecipientId = @UserId
)
変更は '' null'なのであるにNULL'ではありません。 – user1935361
@ user1935361レコードが常にいくつかのidを指しているので、 'nullである 'というレコードは表示されない – Developer