Эй, ребята, спасибо заранее за любую помощь, у меня есть этот триггер в моем SQL Server 2012 баз данныхSQL Server 2012 Trigger
USE Teste_TextMining
CREATE TRIGGER Noticia07032016 ON dbo.textos
AFTER INSERT
AS
DECLARE @ID INT
SET @ID = ( SELECT MAX(ID_texto) FROM dbo.textos)
DECLARE @tag NVARCHAR(MAX)
SET @tag = ( SELECT TOP 1 keyphrase
FROM semantickeyphrasetable(textos, *)
WHERE [email protected])
BEGIN
UPDATE dbo.textos
SET tag = UPPER(@tag)
WHERE ID_texto = @ID
END
BEGIN
UPDATE dbo.textos
SET data = GETDATE()
WHERE ID_texto = @ID
END
GO
И как вы можете видеть, что необходимо обновить 2 значения строки «метка» и строку «data», как только что-то вставляется в таблицу, но только обновляет строку «данные».
Если я просто выбираю этот кусок кода и запускаю/отлаживаю его, он фактически обновляет обе строки, любую идею, почему это происходит?
DECLARE @ID INT
SET @ID = ( SELECT MAX(ID_texto) FROM dbo.textos)
DECLARE @tag NVARCHAR(MAX)
SET @tag = ( SELECT TOP 1 keyphrase
FROM semantickeyphrasetable(textos, *)
WHERE [email protected])
BEGIN
UPDATE dbo.textos
SET tag = UPPER(@tag)
WHERE ID_texto = @ID
END
BEGIN
UPDATE dbo.textos
SET data = GETDATE()
WHERE ID_texto = @ID
END
Еще раз за вас за вашу помощь и время.
После Вставки вы используете триггер, чтобы обновить ту же таблицу, в которой установлен триггер. Я бы сделал это с ограничениями по умолчанию и/или вычисляемыми столбцами. –
Я согласен с @TabAlleman здесь. Ваша триггерная логика здесь полностью нарушена. Если вы когда-либо вставляете более 1 строки своей логики, если не собираетесь работать правильно. Вам следует избегать скалярных переменных, и вы также должны ссылаться на вставленные и/или удаленные таблицы в триггеры. –