【问题标题】:How do I insert the same row in two tables using a trigger with T-SQL?如何使用 T-SQL 触发器在两个表中插入同一行?
【发布时间】:2020-08-22 23:46:15
【问题描述】:

我现在挣扎了 2 个小时。我有tableoefenen2tableoefenen3。在将新行插入tableoefenen2 后,我想在tableoefenen3 中获得同一行。

这是我在 T-SQL 中创建的:

CREATE TRIGGER tbloefenen_Trigger2 
ON tbloefenen2
AFTER INSERT
AS
BEGIN
    INSERT INTO tblOefenen3
        SELECT naam, achternaam, datum, uren, id 
        FROM Inserted
END

在我将新行插入 tableoefenen2 后,它只选择插入的列..

所以我正在寻找如何查询 tbloefenen3 将使用 tableoefenen2 的新行进行更新?

我找不到正确的查询.. 提前谢谢您!

【问题讨论】:

  • 表名具有附加了顺序值的模式通常表示模式问题。并且不要养成在没有任何列列表的情况下编写插入语句的懒惰做法 - 最终会导致问题。

标签: sql-server tsql triggers


【解决方案1】:

试试下面,

CREATE TRIGGER tbloefenen_Trigger2 
    ON tbloefenen2
    AFTER INSERT
    AS
    BEGIN
    insert into tblOefenen3(naam, achternaam, datum, uren, id)
        select i.naam, i.achternaam, i.datum, i.uren, i.id from inserted i;
    END

要检查记录是否插入到新表中,请在新表上触发选择。

select naam, achternaam, datum, uren, id 
from tblOefenen3
where id = <Id that was inserted>

如果您仍在苦苦挣扎,请访问 DB fiddle 链接以获取完整的解决方案和测试。 https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=9beddc6c2d16154bbf8237a3a6a15128

【讨论】:

  • 非常感谢。那确实有帮助。但现在我面临下一个问题。我正在尝试向 tableoefenen2 插入一些东西,但它无法插入,因为它说我必须填写 ID。但我不能,因为它是由级联自动填充的,而 ID 是主键。我想添加名称和确定名称(通常它可以工作,因为其他列允许空值并且自动填充 id)无法将值 NULL 插入列 'ID',dbo.tblOefenen2';列不允许空值。插入失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
相关资源
最近更新 更多