SQL Server Избегайте уникальных нарушений ограничений с помощью общего табличного выражения - PullRequest
0 голосов
/ 01 июня 2018

если у меня есть уникальное ограничение для отдела столбцов, и я не хочу, чтобы SQL генерировал уникальное нарушение ограничения, вместо этого я бы НЕ хотел обновлять столбец, если значение уже существует в другой строке.Безопасно ли это использовать (непротиворечивость), если два или более пользователей / соединения выполняют один и тот же код одновременно?СПАСИБО!

declare @piDepartment varchar(20) = 'test'
declare @piDepartmentSid int = 1105;

WITH CTE
as
(
    select top 1 1 [exists]
    from 
        dbo.tb_Department
    where
        Department = @piDepartment and
        [Department_SID] <> @piDepartmentSid
)
update D set 
    Department = @piDepartment
FROM 
    dbo.tb_Department D
    left join CTE on 1 = CTE.[exists]
where
    D.Department_SID = @piDepartmentSid and
    CTE.[exists] is null;

1 Ответ

0 голосов
/ 01 июня 2018

Более безопасный способ сделать это - сохранить уникальное ограничение и использовать блок TRY..CATCH, чтобы избежать появления ошибки нарушения ограничения при ее возникновении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...