sql server而不是触发器insert语句,其中插入了来自

sql server而不是触发器insert语句,其中插入了来自,sql,sql-server,tsql,triggers,Sql,Sql Server,Tsql,Triggers,我有一个代替触发器。我在变量中有一个值 我想将该值插入其中一列,并使用inserted中的字段。这就是我努力实现的目标: declare @someLocalVariable varchar(9) set @someLocalVariable = dbo.someLocalUDF() INSERT myTable (field1, field2, field3) VALUES (@someLocalVariable, (select field2, field3 from inserted)

我有一个代替触发器。我在变量中有一个值

我想将该值插入其中一列,并使用inserted中的字段。这就是我努力实现的目标:

declare @someLocalVariable varchar(9)

set @someLocalVariable = dbo.someLocalUDF()

INSERT myTable (field1, field2, field3)
VALUES (@someLocalVariable, (select field2, field3 from inserted))
请记住,如果这是由批插入触发的(即插入的有多条记录),则所有记录也将插入到目标表中

(这正是它应该做的,但出于某种原因,人们通常会忘记这一点。)

编辑

OP忘记了说出他的问题的真正含义:生成唯一的主键值。因此,在这种情况下,一种方法是这样:

CREATE TRIGGER
    dbo.InsteadOfInsertMyTable
    ON MyTable
    INSTEAD OF INSERT
AS
BEGIN
    INSERT INTO myTable (
        primaryKeyField,
        field2,
        field3
    ) SELECT
        dbo.someUniqueValueGeneratorUDF(),
        field2,
        field3
    FROM
        INSERTED
END
GO

+我不知道为什么OP不使用默认值。我的udf正在递增字符串主键。因此,您是正确的,它不适用于批量插入。有没有办法用udf值更新INSERTED,然后插入所有插入的内容?@tim:啊,明白了。没问题-直接从insert语句调用函数即可。我会修改我的答案。谢谢你。是的,我试着把我整个问题的一部分贴出来。我将标记为已回答,并重新发布我的全部问题。但感谢您回答我的问题,并指出我的方法存在的问题。
CREATE TRIGGER
    dbo.InsteadOfInsertMyTable
    ON MyTable
    INSTEAD OF INSERT
AS
BEGIN
    INSERT INTO myTable (
        primaryKeyField,
        field2,
        field3
    ) SELECT
        dbo.someUniqueValueGeneratorUDF(),
        field2,
        field3
    FROM
        INSERTED
END
GO