可能是我没说清楚。我要实时监测 A机的SQL Server中一个表中是否存在记录。
我现在采用的是用线程不停的监测这个表,Open 表
看看有没记录
Close 表我总感觉这样做不好,有人说用触发器,我没搞清楚用触发器来干什么?

解决方案 »

  1.   

    没搞清楚用触发器来干什么?
    它是存储过程的一种,运行在服务端,都是使用SQL语言编写,使用触发器是你最佳的选择,具体如何写触发器请看下相关书籍
      

  2.   

    比如你有一个表A01--人员信息表;b01--信息检测表
    A01结构如下
    人员编号  人员姓名    性别   
    001      王小梦     女
    002      盛小丽     女b01结构
    人员编号,姓名,时间(getdata())
    CREATE TRIGGER ins_A01 ON A01
    FOR INSERT
    AS
    if exists (select * from sysobjects where Name='B01' and Type='U')
    begin  
      Insert into B01(人员编号, 人员姓名)
        select 人员编号,姓名  
          from Inserted
    endGO这个东东的意思是将a01表中只要有记录我就插进b01
    现在整理下思路,假设你要检测的是A01表,每次新进记录,将a01表中的人员编号插进b01
    b01中的时间是系统当前时间,我在查询的时候,我直接调用b01就知道A01是否新增加了记录,什么时候新增的记录。
      

  3.   

    楼上的兄弟,谢谢你,还是有点不明白,
    这样做我不监视A01表,但仍然要监测b01表啊。
    那么监测b01表时,不是还要不停的打开,关闭表操作么?
      

  4.   

    高手们快来救救我啊?到底是我没说清楚,还是我理解不了啊?
    我就是想监测表中是否存在记录,但又不想这样的操作。
    open 表
    查一下有没记录
    close 表
      

  5.   

    你只要检测b01表就可以了
    无论你采用什么方式,都必须要在delphi调用的时候查看下该表的记录.
    我的这个方式是你只要在a01中有记录,即在b01中留下痕迹.
    你想知道是否有记录,只要查下b01就可以了.
    当然你想看是新增了记录还是删除了记录.
    可以再加个字段,操作字段:字段值可以为---新增(0)\删除(1)\修改(2),对这个字段的操作,你可以写在触发器中.
    明白了没?哥哥?
      

  6.   

    我的理解:用触发器建立在你想监控的表中,如果有记录是可以将信息比如true存在一个表中(可以只有一条记录)
    这样,你的客户端程序就直接扫描这一个表就可以了(状态更改则有新数据)。如果你直接扫描你要监控的表也可以,但是随着时间增加,你这个业务表中的数据会不断的增加(在数据量小时你close,open可以没有问题,但数据达到一定量时速度必然会减慢,当然你可以在这个表中加状态控制,索引等)。
    还有:利用sqlserver的系统内存储过程可以发邮件等操作,记得以前公司的数据库管理员这样做过,像错误报警等 都通过sqlserver来进行处理,具体实现方法不太清楚,但你可以到SQL版中问一下,会有高手帮你的。