我试图用这个逻辑写一个触发器:
插入后,如果某列=' Fprice_bat',请将其他列的值更改为&00; 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"它应该说插入插入的行...但语法不对。
如何使此查询编辑插入的行而不是向表中添加新记录?
答案 0 :(得分:2)
您的第一个错误是仅假设单行插入。所有DML操作都是设置操作。所以如果你想用套装更新一些东西。
CREATE TRIGGER [dbo].[TR_FixBatchTimes_I]
ON [dbo].[HEADER_BAT]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
update HEADER_BAT
set F908='0000', F910=2359, F914='WAIT'
from HEADER_BAT h
inner join inserted i on h.id = i.id --or what is PK
where i.F916 = 'FSPRICE_BAT'
END
答案 1 :(得分:1)
我不完全理解您的逻辑,但我认为您希望更改class const_iterator
{
private:
Node* m_node;
public:
const_iterator(Node* node)
: m_node(node)
{
}
int operator*() const
{
return m_node->value;
}
const Node* operator->() const
{
return m_node;
}
......
}
列中插入的值,具体取决于F908
列中传递的内容。
F916