我有这个存储过程:过程只插入一条记录
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
,当我尝试用例如一些值来执行它:
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排得受影响,而且最后的价值只能进入我的表格。任何想法为什么?
它是在TSQL? –
您正在从TVP中选择“TOP(1)”行,然后插入该行。所以当然,只有这一行将被插入..... –