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

标签 java sql-server tsql

除了在sql server 2005中编写触发器之外,还有什么方法可以查出是否插入了新记录。(可以是tsql,也可以通过java...) 由于供应商不允许在数据库上正确触发... 另外如何生成包含新插入行数据的文件..bcp 是一个好的解决方案吗?

最佳答案

您可以定义一个审核表,然后将 OUTPUT 命令添加到 INPUT 或 UPDATE 语句(顺便说一句,DELETE 也是如此)。

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

关于java - Sql server 2005知道插入了新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9243389/

相关文章:

java - 修改作为托管属性从另一个托管 Bean 访问的托管 Bean 的私有(private)对象属性

sql - 通过PowerShell ISE从SQL Server更改Export-CSV文件中的语言

sql-server - 在 Microsoft SQL Server 2008 上以十六进制 (0x000000000000000866) 显示的时间戳字段中的值

sql - 如何通过 T-SQL 在 SQL Server 2008 中创建计划作业?

sql - MSSQL 动态透视列值到列标题

java - 从单链表中删除最后一个节点(java)

java - 在金融应用程序的 jms 中发布订阅模式

java - Amazon Java SDK 与 Jersey 的 REST - 无法验证

sql-server - 如何生成 SQL Server 作业及其所有者的列表

tsql - 转换Hijri Shamsi日期格式sql