Вы должны понять, как триггеры работы в SQL Server - они стреляют по на заявление уровне - не в строке - так что вы не можете просто проверить, если строка вставляется содержит NewName
в Столбец Names
- оператор INSERT
может вставлять десятки строк одновременно, и ваш триггер будет запускать только для всего утверждения.
Таким образом, вы не можете предотвратить одну строку с вставкой - если ваш INSERT
заявление вставлено 57 строк и один из них содержит NewName
в Names
колонке, вы можете просто изменить это значение на этой конкретной строке, или вы можете отменить транзакцию и остановить весь процесс INSERT
- NONE из 57 строк будет вставлен.
Так что же вы действительно хотите сделать, в конце концов? Если ваш INSERT
из n строк содержит одну строку со значением NewNames
в столбце Names
- вы хотите остановить весь процесс INSERT
и отменить транзакцию? В этом случае - использовать что-то вроде этого:
CREATE TRIGGER newtrg
ON students
AFTER INSERT
AS
IF EXISTS (SELECT * FROM Inserted WHERE Names = 'NewName')
-- any of of the rows being inserted contains `NewName`
-- in this case, ABORT the whole INSERT
ROLLBACK TRANSACTION
Или, если вы хотите, чтобы обновить эти строки после того, как они были вставлены, чтобы получить новое значение (вместо NewNames
) - попробовать что-то вроде этого:
CREATE TRIGGER newtrg
ON students
AFTER INSERT
AS
UPDATE s
SET Names = 'SomeOtherValue'
FROM dbo.Students s
INNER JOIN Inserted i ON s.StudentID = i.StudentID -- use the primary key here
WHERE i.Names = 'NewName'
Вы должны помнить, что значения не вставлены. Строки вставлены, а один из столбцов - NewName. Столбец ВСЕГДА. Хотите, чтобы это выполнялось при вставке и обновлении? Если обновить информацию о том, когда значение будет обновлено в запросе, но значение будет одинаковым? –
Первым шагом к созданию триггеров является знание того, какую СУБД вы используете (у вас есть как MySQL, так и SQL Server, отмеченные тегами - выберите один.) И первым шагом к получению помощи является * на самом деле задающий вопрос *. Покажите свои попытки и задайте вопросы о том, на что вы застряли. – Siyual
ОК, извините, я имею в виду строку вместо ценности, я отредактировал сообщение, теперь вы можете мне помочь? –