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.

Есть ли что-то явно глупое в любом из вышеперечисленных подходов? Один быстрее другого?

Ответы на вопрос(6)

Ваш ответ на вопрос