I이 저장 프로 시저가 있습니다절차 삽입 하나의 레코드 만
DECLARE @OfferPriceTVP AS [dbo].[TVP_DealerOfferPrice]
INSERT INTO @OfferPriceTVP (DealerOfferId, CountryId, VatRateId, DefaultGrossPrice, SaleGrossPrice, SaleFromDate, SaleToDate)
VALUES (10006805, 1, 1, 1, 1, 2, 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, 1, NULL, NULL);
EXEC [dbo].[TVP_DealerOfferPrice] @OfferPriceTVP;
GO
SQL 서버는 1 행 가져 내게 보여줍니다
CREATE PROCEDURE [dbo].[TVP_OfferPrice] @OfferPriceTVP TVP_OfferPrice READONLY
AS
BEGIN
DECLARE @OfferId INT;
DECLARE @CountryId INT ;
DECLARE @VatRateId INT ;
DECLARE @SalePrice DECIMAL(16, 4) ;
DECLARE @SaleFromDate DATETIME;
DECLARE @SaleToDate DATETIME;
DECLARE @DefaultPrice DECIMAL(16, 4);
DECLARE @Price DECIMAL(16,4);
SELECT
@OfferId = a.OfferId, @CountryId = a.CountryId, @VatRateId = a.VatRateId,
@SalePrice = a.SalePrice, @SaleFromDate = a.SaleFromDate, @SaleToDate = a.SaleToDate,
@DefaultPrice =a.DefaultPrice
FROM
@OfferPriceTVP a;
SET @Price = (SELECT TOP 1 pp.Price
FROM [dbo].[Promotion] p
INNER JOIN [dbo].[PromotionProduct] pp ON pp.ProductId = p.Id
INNER JOIN [dbo].[Offer] do ON do.ProductId = pp.ProductId AND do.Id = @OfferId
INNER JOIN [dbo].[PromotionAssignment] pda ON pda.PromotionId = p.Id AND pda.Id = do.Id
WHERE p.CountryId = @CountryId
AND GETUTCDATE() >= p.ValidFrom AND GETUTCDATE() < p.ValidTo
ORDER BY p.ValidFrom DESC, pp.Price)
IF(@Price IS NULL AND @SalePrice IS NOT NULL AND GETUTCDATE() >= @SaleFromDate AND GETUTCDATE() < @SaleFromDate)
SET @Price = @SalePrice
IF @Price IS NULL
SET @Price = @DefaultPrice
IF NOT EXISTS (SELECT * FROM [dbo].[OfferPrice] dop WHERE dop.OfferId = @OfferId AND dop.CountryId = @CountryId)
INSERT INTO [dbo].[OfferPrice](OfferId, CountryId, VatRateId, Price, DefaultPrice, SalePrice, SaleFromDate, SaleToDate)
SELECT
@OfferId, @CountryId, @VatRateId, @Price, @DefaultPrice,
@SalePrice, @SaleFromDate, @SaleToDate
ELSE
UPDATE b
SET b.VatRateId = @VatRateId, @Price = @Price, b.DefaultPrice = @DefaultPrice,
b.SalePrice = @SalePrice, b.SaleFromDate = @SaleFromDate, b.SaleToDate = @SaleToDate
FROM
[dbo].OfferPrice b
WHERE
b.OfferId = @OfferId AND b.CountryId = @CountryId;
END
을 내가 예를 들어 어떤 값을 실행하려고 할 때 영향을 받고 실제로 마지막 값은 내 테이블에만 들어갑니다. 왜 그런가?
여기의 예는 무엇입니까? –
TVP에서'TOP (1)'행을 선택한 다음 해당 행을 삽입합니다. 그래서 당연히 단 하나의 행만 삽입 될 것입니다 ..... –