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?