如何通过SQL查到一张表...up给分

noahart 2004-08-05 09:28:21
请教!

每隔一段时间查一次表,时间间隔不定,每次要查到表里面对于上次查询时不同的数据,也就是说在上次查询完一直到这次查询开始前,中间发生的所有的update和insert的数据都要被查出来.不能建临时表!

谢谢
...全文
220 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rouqu 2004-08-06
  • 打赏
  • 举报
回复
UP X 100
dadao7511 2004-08-06
  • 打赏
  • 举报
回复
嗯---
l9988 2004-08-05
  • 打赏
  • 举报
回复
UPUPUPUPUPUPUP
fxcl2006 2004-08-05
  • 打赏
  • 举报
回复
大虾回帖,学习,UP。
zjcxc 2004-08-05
  • 打赏
  • 举报
回复
--方案2的简单示例

declare @t table(a int,b int,标识 int)
insert @t(a) select 1
union all select 2

update @t set 标识=BINARY_CHECKSUM(a,b)

update @t set a=100 where a=2

select a,b from @t
where 标识<>BINARY_CHECKSUM(a,b)
zjcxc 2004-08-05
  • 打赏
  • 举报
回复
--方案2,用 BINARY_CHECKSUM + 标识字段 (不要求表中有主键,但要写字段列表)

--在你的表中增加一个字段: 字段名:标识 类型:int 默认值:0

--查询时用:
select * from 表
where 标识<>BINARY_CHECKSUM(列1,列2,...列n)

--然后更新标识字段
update 表 set 标识=BINARY_CHECKSUM(列1,列2,...列n)

icewen 2004-08-05
  • 打赏
  • 举报
回复
两位老大在上面 我只好up拉 哈
zjcxc 2004-08-05
  • 打赏
  • 举报
回复
方案1,触发器+标识字段(要求你的表中有主键)

在你的表中增加一个标识字段: 字段名:标识 类型:bit,默认值:1

写如下触发器:
create trigger tr_process on 你的表
for update
as
if update(标识) return
update a set 标识=1
from 你的表 a,inserted b
where a.主键=b.主键
go

--查询的时候,用:
select * from 你的表 where 标识=1
update 你的表 set 标识=0 --查询完成后,将标识设置为0,表示已经查询过
pengdali 2004-08-05
  • 打赏
  • 举报
回复
sql帮助:


一个表只能有一个 timestamp 列。每次插入或更新包含 timestamp 列的行时,timestamp 列中的值均会更新。这一属性使 timestamp 列不适合作为键使用,尤其是不能作为主键使用。对行的任何更新都会更改 timestamp 值,从而更改键值。如果该列属于主键,那么旧的键值将无效,进而引用该旧值的外键也将不再有效。如果该表在动态游标中引用,则所有更新均会更改游标中行的位置。如果该列属于索引键,则对数据行的所有更新还将导致索引更新。

不可为空的 timestamp 列在语义上等价于 binary(8) 列。可为空的 timestamp 列在语义上等价于 varbinary(8) 列。



你用这个类型呢?不过临时表我看是要的。
zjcxc 2004-08-05
  • 打赏
  • 举报
回复
定时查询这个就不管了,写作业自己去实现

只提出如果查询的方案

既然楼主提出不能用临时表,那没办法,只能在原表上打主意(就是必须在原表是增加辅助字段,如果不能改表结构,那我认为应该是很难做到(至少我想不到方法)

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧