0
私はストアドプロシージャを持っています。そこでは、条件がある場合はnull以外の値を選択し、それ以外の場合はテーブルからnull値を選択します。誰もが親切に私を助けて。これでsqlのWhere句内の条件
ALTER PROCEDURE SearchPromotionBYPromotionANDVehicleID
@PromotionCode VARCHAR(100)
,@TypeId INT
,@LocationId INT
,@ClientId INT
AS
BEGIN
SET NOCOUNT ON;
SELECT top 1 tp.PromotionID
,tp.PromotionCode
,tp.ClientID
,tp.StartDate
,tp.EndDate
,tp.VehicleTypeId
,tv.VehicleType
,tp.LocationId
FROM tblstudent tp
LEFT OUTER JOIN tblType tv ON tp.TypeId = tv.TypeId
WHERE tp.PromotionCode = @PromotionCode
AND
((@LocationId IS NOT NULL AND tp.LocationId = @LocationId) OR (tp.LocationId IS NULL) OR (@LocationId IS NULL) or (tp.LocationId = 0))
をロケーションIDと同じプロモーションコードとすべての場所での1(つまり、ロケーションIDが0である)と、互いの2つのレコード(R1とR2)を検討してください。パラメータ@locationIdが値を持つ場合(レコードr2の値と等しい値を考慮する)、レコード2を返す必要があります。それ以外の場合は、r1を返す必要があります。
問題は、locationID1でレコードを追加し、次に0のlocationID2で別のロケーションIDでレコードを追加するときです。locationID2を選択すると、locationId 0のレコードが返されます –
サンプルデータを単語で記述するのではなく、DDL + DMLを使用してください。こうすることで、テスト環境にコピーして正確な回答を得ることができます。また、使用している関連RDBMSのタグ(製品タグとバージョンタグ)を追加してください。 –