SQL INSERT, но избегайте дубликатов
Я хочу сделать несколько быстрых вставок, но избегать дубликатов в таблице. Ради аргумента давайте назовем его MarketPrices, я экспериментировал с двумя способами сделать это, но не уверен, как измерить, что будет быстрее.
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
ИЛИ ЖЕ
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
Предположить, что@whatever
является входным параметром в хранимой процедуре.
Я хочу иметь возможность вставлять новую запись для каждого кода безопасности, когда BuyPrice или SellPrice или оба отличаются от любого другого предыдущего вхождения. Меня не волнует IsMarketOpen.
Есть ли что-то явно глупое в любом из вышеперечисленных подходов? Один быстрее другого?