sql server而不是使用插入的变量和值触发插入语句

Posted

技术标签:

【中文标题】sql server而不是使用插入的变量和值触发插入语句【英文标题】:sql server instead of trigger insert statement with variables and values from inserted 【发布时间】:2011-01-26 17:04:36 【问题描述】:

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

我想将值插入其中一列并使用插入的字段。这就是我想要完成的:

declare @someLocalVariable varchar(9)

set @someLocalVariable = dbo.someLocalUDF()

INSERT myTable (field1, field2, field3)
VALUES (@someLocalVariable, (select field2, field3 from inserted))

【问题讨论】:

【参考方案1】:
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

【讨论】:

+1 不知道为什么 OP 不只是为此使用默认值。 我的 udf 正在增加一个字符串主键。所以你是对的,它不适用于批量插入。有没有办法用 udf 值更新 INSERTED,然后插入所有插入的内容? @tim:啊,明白了。没问题 - 只需直接从插入语句调用函数。我将编辑我的答案。 感谢 rsenna。是的,我试图发布我的整体问题的一部分。我将标记为已回答并重新发布我的整体问题。但是感谢您回答我的问题并指出我的方法存在的问题。

以上是关于sql server而不是使用插入的变量和值触发插入语句的主要内容,如果未能解决你的问题,请参考以下文章

而不是SQL Server中的触发器丢失SCOPE_IDENTITY?

SQL Server插入触发器改进

Mybatis +sql server 插人中文乱码

sql插入的操作

SQL Server触发器根据上面的文件名和值填充Null值

SQL Server 通知 - 我的 OnChange 没有触发