2013-11-10 3 views
-1

Я пытаюсь создать довольно простой триггер SQL Server, надеюсь, кто-то может помочь.SQL Server триггер обновления столбца из другой таблицы

У меня есть таблица со структурой, как это:

Таблица № 1:

CREATE TABLE `teg_priority` (
    `UCIDN` BIGINT(50) NULL DEFAULT NULL, 
    `CIDN` BIGINT(50) NOT NULL, 
    `CustomerName` VARCHAR(200) NOT NULL, 
    `NGM` VARCHAR(150) NULL DEFAULT NULL, 
    `Service_Manager` VARCHAR(150) NULL DEFAULT NULL, 
    `CBS` LONGTEXT NULL, 
    `Tag` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`CIDN`) 
) 

и другая таблица (таблица № 2):

CREATE TABLE `custalign` (
    `UCIDN` BIGINT(20) NOT NULL, 
    `CIDN` BIGINT(20) NOT NULL, 
    `CustomerName` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`CIDN`) 
) 

Я пытаюсь настроить триггер, где каждый раз, когда новая запись вставляется в первую таблицу, следующий запрос будет запускаться как триггер для обновления поля UCIDN в таблице 1

update teg_priority 
set teg_priority.UCIDN = (select UCIDN from custalign 
where teg_priority.CIDN = custalign.CIDN) 

Приведенный выше запрос работает, я просто не знаю, как записать его в качестве оператора триггера.

Пожалуйста, помогите.

+0

Вы говорите, что не знаете, как создать спусковой крючок? Если это так, начните с этой страницы: http://technet.microsoft.com/en-us/library/ms189799.aspx – acfrancis

+3

Этот вопрос ** помечен ** с помощью 'sql-server' (как в ** Microsoft SQL Server **) - но обратные ссылки вокруг имен столбцов таблиц, похоже, намекают на ** MySQL ** вместо этого - убедитесь, что у вас есть ** правые ** теги! –

ответ

1

попробовать this..hope Это поможет вам

Для MySQL

CREATE TRIGGER teg_priorityTrigger AFTER INSERT ON teg_priority 
    FOR EACH ROW 
BEGIN 
    UPDATE inserted 
    set inserted.UCIDN = (select UCIDN from custalign 
    where inserted.CIDN = custalign.CIDN) 
END 

Для SQL Server

CREATE TRIGGER teg_priorityTrigger ON dbo.teg_priority AFTER INSERT 
    AS 
     UPDATE inserted 
     set inserted.UCIDN = (select UCIDN from custalign 
     where inserted.CIDN = custalign.CIDN) 

надеюсь, что это поможет вам ...

2
CREATE TRIGGER dbo.Teg_priority_after_insert 
ON dbo.teg_priority AFTER INSERT 
AS 

UPDATE inserted 
set inserted.UCIDN = (select UCIDN from custalign 
where inserted.CIDN = custalign.CIDN) 

Это ваш ответ. Вы можете рассмотреть изменение подхода; предполагая, что это не требует полной перестройки вашего процесса. Я не могу предложить больше, не зная, чего вы в конечном итоге пытаетесь достичь.

В триггерах SQL Server имеется таблица inserted и автоматически созданная таблица deleted, к которой вы можете обратиться. Каждый из них содержит новые и старые записи в результате любого заявления AFTER [INSERT],[UPDATE],[DELETE]. Таблица inserted доступна для триггеров AFTER INSERT и UPDATE, тогда как таблица deleted доступна для триггеров AFTER UPDATE и DELETE.

Это может быть больше, чем вы хотели знать, но я подумал, что вы получите краткое объяснение того, где в моем коде появилась таблица inserted.

[Вставьте все обычные предостережения о попытке не использовать триггеры, где это возможно здесь.]

+0

Благодарим вас за помощь. Триггер не создает, он жалуется на синтаксис? Я не использую ms sql, это mysql – user2977056

+0

Я вижу ... когда я ответил, тег в вопросе имел в нем «sql-server-triggers». Вы должны быть в состоянии google «MySQL ПОСЛЕ ВСТАВКИ ИНСЕРТ», пропустить синтаксис, повторно использовать мой ответ для работы с синтаксисом MySQL. –

Смежные вопросы