Чтобы получить ошибку, вы получаете столбец Verkoper
должен иметь тип bit
. Как это исправить, зависит от общего дизайна, либо измените тип данных, либо используйте правильный столбец. Это тривиально.
Однако я отвечаю на вопрос, потому что ваш триггер в настоящее время не обрабатывает тот факт, что псевдотаблица Inserted
может содержать несколько строк.
Вы должны всегда пытаться решить проблемы T- SQL как проблемы на основе множеств, а не процедурные проблемы - потому что реляционные базы данных оптимизированы для операций на множествах.
Я думаю, что следующий оператор update
выполняет ту же функцию, что и код, который вы опубликовали, но, если нет, надеюсь, вы поймете идею и сможете ее адаптировать.
UPDATE Gebruiker SET
Verkoper = 'niet'
WHERE gebruikersnaam in (SELECT gebruikersnaam FROM INSERTED)
and (SELECT COUNT(*) FROM Verkoper V WHERE V.Gebruiker = gebruikersnaam) = 0
and Verkoper = 'wel';
Фактически (спасибо Дэвиду), заменив слова 'niet' и 'wel' значениями битов 0 и 1 может быть решение, которое вы ищете:
UPDATE Gebruiker SET
Verkoper = 0
WHERE gebruikersnaam in (SELECT gebruikersnaam FROM INSERTED)
and (SELECT COUNT(*) FROM Verkoper V WHERE V.Gebruiker = gebruikersnaam) = 0
and Verkoper = 1;
Вы должны изменить свой оператор insert
, чтобы также использовать 0 или 1 для Verkoper
.
Примечание. перечислить имена столбцов для вашей вставки. Это не только означает, что вы можете добавлять столбцы позже, не прерывая вставку, но и делает очевидным для людей, не знакомых с вашей схемой, в какой столбец вставляется каждое значение.