2010-06-22 195 views
0

什么是设置触发器以获取表中所有新行并将其插入到工作队列表中的最佳方式。SQL触发器插入

非常感谢 SP

+0

您使用的是什么RDBMS和版本?触发器语法各不相同。只要跟踪最近处理的ID或以任何方式为此添加日期时间列,您可能会更好? – 2010-06-22 13:15:37

+0

抱歉它是一个SQL Server 2000数据库 – Steven 2010-06-22 13:18:36

回答

2

要回答这个问题你问

CREATE TRIGGER dbo.tr_i_BaseTable 
    ON dbo.BaseTable 
    AFTER INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO WorkTable 
    SELECT * FROM INSERTED 

END 

但不是实际复制的行两次你能不能用行的一些其他属性来检测应考虑工作台的一部分,“新”的。如ID或添加“插入”日期/时间字段。

或另一种作法可能是刚与新工作台重新开始,并考虑要归档所有以前的记录。您可以创建(可能是分区)视图UNION ALL - 这两个表适用于需要在合并集上工作的那些查询。

+0

我了解您与您的评论的到来。 数据库表是一个正确的混乱和运行速度很慢,因此我想保持“工作队列”数据分离。 感谢您的代码,您已经完成了我的设想。 再次感谢 Sp 非常感谢 – Steven 2010-06-22 13:39:18

1

有了这个触发器:

CREATE TRIGGER InsertIntoWorkingTable 
    ON VeryOldHugeDatabaseTable 
    INSTEAD OF INSERT 
AS 
    insert into WorkingTable (column1, column2, column3...) (
     select column1, column2, column3 
      from inserted 
    ) 

所有你需要做的就是保持插入到你的VeryOldHugeDatabaseTable。触发器会忙于插入此工作表。

一旦一段时间,你可以简单地通过一个工作什么的都插入或存档推出一个存储过程到这个旧表从工作表。

+0

我从他的“工作队列”的评论得到的印象是,他是在插入主表和放置FK在一个单独的表作为某种行动项目连接到该行。 – Kendrick 2010-06-22 13:10:46

+0

我们有一个v数据库表,最初建在访问(它的噩梦),它目前只有80列宽,有1.5米行。它仍然被用于使用复杂的存储过程为下一个客户提供服务,正如您可以想象的那样,这个过程非常缓慢。我试着给所有新行传输到另一台(7列,将只具有100-200行),一旦他们被虐待的工作将它们归档,这样前端的用户将看到的速度大幅增加.. 诗前端应用程序仍然是和访问数据库 – Steven 2010-06-22 13:15:17

+0

我现在看到了需要! =) – 2010-06-22 13:30:39

0

一种“T-SQL触发”搜索返回这是第一个结果:

Create Trigger

除了语法,你几乎回答了你自己的问题。在AFTER INSERT中设置一个触发器并在其中放入一条插入语句。