sql server而不是触发器插入语句,其中包含插入的变量和值

时间:2011-01-26 17:04:37

标签: 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))

1 个答案:

答案 0 :(得分:7)

INSERT INTO myTable (
    field1,
    field2,
    field3
) SELECT
    @someLocalVariable,
    field2,
    field3
FROM
    INSERTED

请记住,如果这是由批量插入触发的(即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