SQL INSERT, ale unikaj duplikatów
Chcę zrobić kilka szybkich wstawek, ale unikać duplikatów w tabeli. Dla dobra argumentu nazwijmy to MarketPrices, eksperymentowałem z dwoma sposobami, ale nie wiem, jak testować, co będzie szybsze.
INSERT INTO MarketPrices (SecurityCode, BuyPrice, SellPrice, IsMarketOpen)
SELECT @SecurityCode, @BuyPrice, @SellPrice, @IsMarketOpen
EXCEPT
SELECT SecurityCode, BuyPrice, SellPrice, j.bool as IsActive FROM MarketPrices
CROSS JOIN (SELECT 0 as bool UNION SELECT 1 as bool ) as j
LUB
DECLARE @MktId int
SET @MktId = (SELECT SecurityId FROM MarketPrices
where SecurityCode = @SecurityCode
and BuyPrice=@BuyPrice
and SellPrice = @SellPrice)
IF (@MktId is NULL)
BEGIN
INSERT INTO MarketPrices (SecurityCode, BuyPrice, SellPrice, IsMarketOpen)
VALUES
(@SecurityCode,@BuyPrice, @SellPrice, @IsMarketOpen)
END
Zakładać, że@whatever
jest parametrem wejściowym w procedurze składowanej.
Chcę mieć możliwość wstawienia nowego rekordu dla każdego kodu zabezpieczeń, gdy cena kupna lub cena sprzedaży lub obie są różne od wszystkich poprzednich zdarzeń. Nie obchodzi mnie IsMarketOpen.
Czy jest coś rażąco głupiego w jednym z powyższych podejść? Czy jeden jest szybszy od drugiego?