使用触发器

时间:2016-07-22 15:15:49

标签: sql sql-server triggers

我试图用这个逻辑写一个触发器:

插入后,如果某列=' 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"它应该说插入插入的行...但语法不对。

如何使此查询编辑插入的行而不是向表中添加新记录?

2 个答案:

答案 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