【发布时间】:2016-07-22 15:15:49
【问题描述】:
我正在尝试使用此逻辑编写触发器:
插入后,如果某列='Fprice_bat',则将不同列的值改为'0000'。
到目前为止,我所写的内容试图简单地向表中添加一条新记录,而不是更新插入的行。
我的查询现在看起来像这样。
CREATE TRIGGER [dbo].[TR_FixBatchTimes_I]
ON [dbo].[HEADER_BAT]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@Starttime varchar(6),
@Endtime varchar(6),
@Batchstate varchar(30),
@Batchtype varchar(30)
SELECT
@Starttime = F908,
@Endtime = F910,
@Batchstate = F914,
@Batchtype = F916
FROM
inserted
IF @Batchtype = 'FSPRICE_BAT'
BEGIN
INSERT INTO HEADER_BAT (F908, F910, F914)
VALUES (0000, 2359, 'WAIT')
END
我想我的错误是因为我正在调用“插入到 header_Bat”,它应该说一些类似于插入到插入的行...但是这种语法是不正确的。
如何让这个查询编辑插入的行而不是向表中添加新记录?
【问题讨论】:
-
将其更改为
before触发器。您可以在将值插入表之前对其进行修改。 -
使用
INSTEAD OF触发器 -
if a certain field = 'Fprice_bat' change the value of a different field to '0000'插入不会更改任何值,它们只是插入新记录,您的问题对我来说没有多大意义。能否请您解释的更清楚一点。 -
另外,您的触发器有一个重大缺陷。它假定插入时只会插入一行。在 sql server 触发器中,每个操作触发一次,而不是每行触发一次。您需要根据触发器设置。当您使用标量变量然后做出决定时,您就是在制造错误。
标签: sql sql-server triggers