有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Sql server 2005知道插入了新记录

在SQLServer2005中,除了写入触发器外,是否还有其他方法可以确定是否插入了新记录。(可以是tsql,也可以是java…) 由于供应商不允许在数据库上使用右触发器。。。 以及如何使用新插入行的数据生成文件。。bcp是一个好的解决方案吗


共 (4) 个答案

  1. # 1 楼答案

    我认为您需要定义“除了写入触发器,是否有任何方法可以确定是否插入了新记录”。触发器基本上是SQL中的事件处理程序。那么,您是否希望在表中插入新行时触发触发器之类的东西?如果是这样,答案是肯定的,它被称为SQL Server Notification Services

    这里有一个beginners article,但我相信你可以通过谷歌搜索“sql server通知”并获得大量结果

    这里还有一篇好文章:Using SqlDependency To Monitor SQL Database Changes

  2. # 2 楼答案

    您可以定义一个审计表,然后将输出命令添加到输入或更新语句中(顺便说一句,也可以删除)

    create table fab4 (id int identity(1,1),FName varchar(80));
    create table fab4_audit (act varchar(10),id int, FName_old varchar(80), FName_new varchar(80), ts datetime not null default(getdate()));
    
    -- insert
    insert into fab4(FName)
    output
    'INSERTED'
    , inserted.*
    into fab4_audit([act],id,FName_new)
    select 'John' union all
    select 'Paul' union all
    select 'George' union all
    select 'Ringo';
    go
    
    -- update
    update f
    set FName='Walrus'
    output
    'UPDATED'
    , inserted.id
    , deleted.FName
    , inserted.FName
    into fab4_audit([act],id,FName_old,FName_new)
    from fab4 f
    where FName='Paul';
    
    -- delete
    delete f
    output
    'DELETED'
    , deleted.id
    , deleted.FName
    into fab4_audit([act],id,FName_old)
    from fab4 f
    where FName in ('John','George');
    go
    
    select * from fab4;
    select * from fab4_audit;
    go
    
  3. # 3 楼答案

    我会建议一个最佳实践,也可能对你有所帮助。如果将更新和插入限制为仅通过存储过程,则可以使用该过程写出审核记录,或者只更新时间/日期字段

  4. # 4 楼答案

    表是否有自动递增主键或createDate列?您可以编写一个cron作业,定期唤醒,并查询自上次运行cron作业以来,数据库中是否有新的内容