нарушение первичного ключа даже когда есть чк не вставить запись - PullRequest
0 голосов
/ 04 декабря 2010
INSERT INTO table 2
SELECT values FROM table 1  LEFT JOIN table 2
ON 1.col1 = 2.col1 and
   1.col2 = 2.col2 and
   1.col3 = 2.col3 
WHERE 
( 
   2.col1   IS NULL AND
   2.col2   IS NULL AND
   2.col3   IS NULL
)

col1, col2, col3 первичных ключей для таблицы 2

Также было выполнено внутреннее соединение по первичному ключу условия <> добавлено, если не существует (выберите 1 из таблицы 2, объедините таблицу 1 с первичными ключами)=) всегда получаю нарушение первичного ключа, ошибка не может вставить

, пожалуйста, помогите

1 Ответ

0 голосов
/ 05 декабря 2010

Не пытаясь выяснить, почему у вас возникла проблема, я предлагаю вам переписать ваш SQL для использования команды MERGE.См. здесь .

Это позволяет вам указать, что делать, если есть дублирующаяся запись или нет.

В качестве примечания, если вы хотите обеспечить хранимую процедуруработает исключительно (вы намекали на это), вам нужно следующее:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE            -- most restrictive

        BEGIN TRY
            BEGIN TRAN

            DECLARE @LockResult int

            SET @LockName = 'MyLockName'

            EXEC    @LockResult = sp_getapplock @Resource = @LockName, @LockMode = 'Exclusive', @LockTimeout = 0

            if @LockResult <> 0 begin
                SET @Failed = 1
            end else begin
                -- WORK HERE
            end

            -- FINALIZE TRANSACTION
        END TRY
        BEGIN CATCH
            -- CATCH CODE
        END CATCH

        SET TRANSACTION ISOLATION LEVEL READ COMMITTED  -- set back to default
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...