에서 ELSE를 건너 뛰는 :Case 문은 항상이 같은 SQL 저장 프로 시저에 삽입하는 동안 CASE 문을 사용하려고 저장 프로 시저
INSERT INTO [dbo].[OfferPrice]
(OfferId,Price,DefaultPrice,SalePrice,
SaleFromDate,SaleToDate)
SELECT tvp.OfferId AS OfferId,
CASE
WHEN @Price IS NOT NULL THEN @Price
WHEN @Price IS NULL
AND tvp.SalePrice IS NOT NULL
AND Getutcdate() >= tvp.SaleFromDate
AND Getutcdate() < tvp.SaleToDate THEN tvp.SalePrice
WHEN @Price IS NULL
AND tvp.SalePrice IS NULL THEN tvp.DefaultPrice
ELSE 0
END AS Price,
tvp.DefaultPrice AS DefaultPrice,
tvp.SalePrice AS SalePrice,
tvp.SaleFromDate AS SaleFromDate,
tvp.SaleToDate AS SaleToDate
FROM @OfferPriceTVP tvp
LEFT JOIN [dbo].OfferPrice dop
ON dop.OfferId = tvp.OfferId
WHERE dop.OfferId IS NULL
문제가 있음을 CASE 것은 항상 ELSE 경우에도 이전 문에 건너 뛰는 사실입니다. 내가 도대체 뭘 잘못하고있는 겁니까?
편집 :
이 @OfferPriceTVP입니다 :
CREATE TYPE [dbo].[TVP_OfferPrice] AS TABLE
(
OfferId INT NOT NULL PRIMARY KEY, CountryId INT NOT NULL, VatRateId INT, DefaultPrice decimal(16, 4), SalePrice decimal(16, 4),
SaleFromDate datetime, SaleToDate datetime
);
그리고 여기에 내가 지금하려고했던 삽입 (그것은 바로 기본값으로 가격을 설정해야 어떤 날짜가 없더라도?) :
DECLARE @OfferPriceTVP AS [dbo].[TVP_OfferPrice]
INSERT INTO @OfferPriceTVP (OfferId,CountryId,VatRateId,DefaultPrice,SalePrice,SaleFromDate,SaleToDate)
VALUES (10006805,2,1,1,1,NULL,NULL),
(10006806,1,1,2,1,NULL,NULL),
(10006807,1,1,3,1,NULL,NULL),
(10006808,1,1,4,1,NULL,NULL),
(10006809,1,1,5,1,NULL,NULL),
(10006810,1,1,6,2,NULL,NULL);
EXEC [dbo].[TVP_OfferPrice] @OfferPriceTVP;
GO
제안 할 수있다. FYI'case'는 모든 조건이 실패했을 때만'else' 부분으로갑니다 –
@Price가 매개 변수로 정의되어 있습니까? –
이 '사례'* 표현에 대해 추론 할 가장 중요한 두 가지 사항은 우리에게 알려주지 않은 '@ Price' 및'@ OfferPriceTVP'변수의 내용 일 것입니다. –