sql-server - 插入 View ,而不是触发器、身份、多个表?

标签 sql-server view triggers

这里是我的表格(Entier = Integer//Caractère long variable = Varchar):

/image/lNjyy.jpg

enter image description here

我创建了一个 View V_Enterprise(idContact, PhoneNumber, email, name, city, adress)

我尝试在该 View 上创建触发器以允许用户更新 View :

CREATE TRIGGER test
ON V_Entreprise
INSTEAD OF INSERT
AS 
DECLARE @T_ContactId INT
BEGIN
    INSERT INTO T_Contact 
    SELECT i.phoneNumber, i.email
    FROM Inserted i 

    SELECT @T_ContactId = @@IDENTITY

    INSERT INTO T_Entreprise
    SELECT @T_ContactId, i.name, i.city, i.adress
    FROM Inserted i 
END ;

正如我所料,它适用于简单的插入,但是当我一次添加几行时,它会失败,因为 @T_ContactId 仅包含第一个 id。有人可以帮我解决它吗?我觉得我应该使用 INNER JOIN 插入,但我不知道如何处理它。

最佳答案

好吧,您永远不应该将标量变量设置为触发器中插入或删除的值。

使用 OUTPUT 子句来取回您的 id 值。

关于sql-server - 插入 View ,而不是触发器、身份、多个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15161345/

相关文章:

sql-server - 带有 FOREIGN KEY REFERENCES 的错误消息

sql - 我怎样才能让一个表 "overrides"另一个?

android - 有时 listView.getChildAt(int index) 返回 NULL (Android)

MySQL - 将表 1 中每个更新的行插入表 2

c# - 尝试使用 C# ado,net 将行插入到 sql server 数据库

sql - 从动态sql中删除最后一个逗号

postgresql - 创建带有 View 定义转储的 SQL - 订购 View 以避免依赖性问题

javascript - 在 AppBrowser 中以编程方式更改 selectMenu 选项

postgresql - 另一个存储过程语法错误 - IF-THEN-ELSE

c# - 使用存储过程在单个表中插入 150 列