триггер для проверки дубликата записи
Привет всем, снова вернулся, на этот раз с вопросом SQL.
У меня есть следующий триггер SQL, чтобы предотвратить дублирование записи.
go create trigger insAssset on tblAssets for insert as begin if exists( select A.ARNumber from tblAssets as A inner join inserted as N on A.AssetID=N.AssetID where A.ARNumber=N.ARNumber ) begin print 'The asset already exist in the database' rollback transaction return end else commit transaction print 'Asset added to the database.' end
Однако этот триггер предотвращает любую запись в базу данных, даже если запись не существует.
Что я делаю не так? любое предложение было бы очень ценно.
Herman<T>.Instance
что вы видите в SSMS, когда выполняете только инструкцию SELECT, а не триггер?
Как он может сравниться с новым значением?
Awoldeselassie
Вот чего я надеялся достичь
каждый актив имеет уникальный AR-номер. при вводе новой записи скрипт должен сравнить новый AR-номер с базой данных. если он существует, то сообщите пользователю, что он существует, и откатитесь назад. если нет, то совершите.
Однако, даже если номер AR не существует, я получаю сообщение "актив уже существует в базе данных", и транзакция заканчивается в триггере.
при выполнении только SELECT он работает нормально, так как не включает триггер.
Herman<T>.Instance
А что, если результат вашего выбора равен нулю?
Был ли уже установлен N. AssetID?
Вам действительно нужен триггер, чтобы проверить это, или вы можете исправить это в хранимой процедуре или функции?
Вставляется ли другая таблица, чем tblAssets? --> Может ли соединение функционировать должным образом?
Awoldeselassie
если выбрать результат имеет значение null, возвращается значение null
AssetID identity (1,1) установлен на, он автоматически присваивает уникальный идентификатор
Я не знаю, как я могу достичь того же результата с proc. поскольку он не может быть вызван в ответ на событие. если вы знаете другой способ достижения того же результата, я был бы признателен вам за помощь.
такие таблицы, как inserted, deleted, временно создаются SSMS для управления при выполнении INSERT или DELETE. вы можете временно обратиться к таблицам, чтобы проверить наличие условий.