SQL Trigger для обновления строки - PullRequest
0 голосов
/ 06 марта 2012

Мне нужен триггер SQL, который будет заполнять ячейку нулями при ее вставке или обновлении. Было любопытно, лучше ли добавлять две строки вместе, как я делаю в команде обновления. Это лучший способ сделать это?

CREATE TRIGGER PadColumnTenCharsInserted ON Table
AFTER INSERT
AS

DECLARE
    @pad_characters VARCHAR(10),
    @target_column NVARCHAR(255)

SET @pad_characters = '0000000000'
SET @target_column = 'IndexField1'

IF UPDATE(IndexField1)
BEGIN
    UPDATE Table
    SET IndexField1 = RIGHT(@pad_characters + IndexField1, 10)
END

GO

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Ваш код дополнения выглядит отлично.

Вместо обновления каждой строки в таблице, как показано ниже:

    UPDATE Table

обновите только строку, которая активировала триггер:

    UPDATE updated

Кроме того, у вас все еще есть какой-то посторонний код - все, что связано с @target_column.И, похоже, вы не уверены, что это триггер INSERT или триггер UPDATE.Я вижу AFTER INSERT и IF UPDATE.

0 голосов
/ 06 марта 2012

Два вопроса:

  1. Что вы делаете с @target_column? Вы объявляете это и устанавливаете это с именем столбца, но тогда вы никогда не используете это. Если вы намереваетесь использовать переменную в ваших последующих операторах SQL, вам может потребоваться заключить операторы в EXECUTE () или использовать sp_executesql ().

  2. Синтаксис «ОБНОВИТЬ таблицу ...» в порядке для вашего оператора обновления, предполагая, что «Таблица» - это имя таблицы, которую вы обновляете. То, что, кажется, отсутствует, это какой-то фильтр. Или вы действительно намеревались обновить этот столбец для каждой строки во всей таблице?
    Один из способов справиться с этим - объявить другую переменную и задать для нее PK обновленной строки, а затем использовать предложение where, чтобы ограничить обновление только этой строкой. Примерно так:

    ОБЪЯВИТЬ @id int

    SELECT @id = Record_ID FROM INSERTED

    - тело вашего триггера здесь

    ГДЕ Record_ID = @ id

  3. Мне нравится ваш код заполнения. Это выглядит хорошо для меня.

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