SQL Server从另一个表触发更新列

时间:2013-11-10 23:59:44

标签: sql sql-server triggers

我正在尝试创建一个相当简单的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`)
)

我正在尝试设置一个触发器,每次在第一个表中插入新记录时,以下查询将作为更新表1中的字段UCIDN的触发器运行

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

以上查询有效我只是不知道如何将其写为触发器语句。

请帮忙。

2 个答案:

答案 0 :(得分: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触发器中,您可以自动生成inserteddeleted表,您可以参考该表。由于任何语句AFTER [INSERT],[UPDATE],[DELETE],每个记录分别包含新旧记录。 AFTER INSERT和UPDATE触发器可以访问inserted表,而AFTER UPDATE和DELETE触发器可以访问deleted表。

这可能比您想知道的要多,但我认为您可以从我的代码中inserted表的来源的简要说明中受益。

[在此处插入所有关于尽量不使用触发器的常见警告。]

答案 1 :(得分:1)

尝试这个..希望这会帮助你

对于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)

希望这会对你有帮助......