代码之家  ›  专栏  ›  技术社区  ›  Harnod

在中使用生成的值而不是触发器

  •  1
  • Harnod  · 技术社区  · 14 年前

    我有一张简单的桌子

    CREATE TABLE tItem (PK_Item INT ITENTITY(1,1) NOT NULL, ItemID VARCHAR(15) NOT NULL)
    

    ItemID是 EXEC @TempID = pGeneralIdentifierRetrieve NULL, NULL, @ItemType

    目前,我已经在一个存储过程中插入了新的记录,它工作得很好。

    我想尝试将插入重写为而不是触发器。我有一个问题-如何引用插入表中的行,以便用新的ItemID更新它们。

    谢谢你的提示

    2 回复  |  直到 14 年前
        1
  •  0
  •   JeffO    14 年前

    在扳机里面你可以得到你想要插入的东西

    Select * from INSERTED 
    

    我不确定在哪里可以获得proc创建id所需的@ItemType

    create trigger ti_tItem
    on tItem
    instead of insert
    as
    begin try
        insert into tItem(ItemID)
        select TempID from [The same code in your procedure]
        where [something] = @ItemType
    end try
    
    begin catch
        rollback transaction
    end catch
    
        2
  •  0
  •   Harnod    14 年前

      SELECT * INTO #MyInserted FROM INSERTED 
        SELECT @RowCount = COUNT(*) FROM #MyInserted WHERE ItemID IS NULL
    
        WHILE @RowCount > 0 
        BEGIN 
           EXEC @TempID = pGeneralIdentifierRetrieve NULL, NULL, @ItemType 
           UPDATE TOP (1) #MyInserted SET ItemID = @TempID WHERE ItemID IS NULL 
           SET @RowCount = 0 
           SELECT @RowCount = COUNT(*) FROM #MyInserted WHERE ItemID IS NULL
        END 
    
       INSERT INTO tItem (ItemID) SELECT (ItemID) FROM #MySelected