Ошибка мягкого удаления слияния SQL Server 2008 - PullRequest
1 голос
/ 26 марта 2009

Я пытаюсь выполнить мягкое удаление строки в моей целевой таблице с помощью команды MERGE SQL Server 2008.

Я думаю, что это должно попадать в раздел "когда не сопоставлено по источнику", поскольку в источнике отсутствует строка, а у цели все еще есть. Все, что я хочу сделать, это установить для бита IsActive значение false, но я получаю сообщение об ошибке.

"Попытка установить для столбца, не поддерживающего NULL, значение NULL."

Чего мне не хватает?

Таблица пользователей:

[ID] [nvarchar](50) NOT NULL,
[FirstName] [nvarchar](200) NULL,
[LastName] [nvarchar](200) NULL,
[EmailAddress] [nvarchar](200) NULL,
[IsActive] [bit] NOT NULL

Оператор слияния:

merge into Users
using TempUserTable lu
on Users.ID = TempUserTable.ID
when matched then
update set
    ID = lu.ID,
    FirstName = lu.FirstName,
    LastName = lu.LastName,
    EMailAddress = lu.EmailAddress,
    IsActive = lu.Status

when not matched then
    insert (ID, FirstName, LastName, EmailAddress, IsActive)
    values (lu.ID, lu.FirstName, lu.LastName, lu.EmailAddress, lu.Status)
when not matched by source then
    update set  IsActive = 0;

Ответы [ 2 ]

1 голос
/ 20 января 2015

Вы можете заставить это работать именно так, как вы хотите, но для меня мне нужно было добавить условие в строке НЕ СОГЛАСОВАНО.

Так что попробуйте что-то вроде ...

WHEN NOT MATCHED BY SOURCE 
                    AND TARGET.[IsActive] = 1 
                    AND TARGET.[DeletedOn] IS NULL 
    THEN UPDATE
    SET 
      TARGET.[IsActive] = 0, 
      TARGET.[DeletedOn] = SYSDATETIMEOFFSET()
0 голосов
/ 13 апреля 2009

Похоже, что ваша временная таблица TempUserTable имеет либо NULL в столбце IsActive, либо в столбце ID.

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