急!!急!!!关于刷新数据的问题

tianshidechibang 2003-08-14 10:09:58
我有一个问题求大家的。数据库来源是从另一个网站取来的。另一个网站数据刷新时,我们网站也跟刷新的。其中一个字段名数据肯定会更新。我想的是判断这个字段名的数据是否更新,如是的,变为1,如不是,就不变(为空)。但是难度很大,因为数据刷新变化是这样的:本来有刷新前数据,但刷新后,先把原来数据全部删除了,后自动添加新的数据。最后循环到以前的。什么方法如何判断这个字段名的数据是否更新呢?????如能解决的加50分的,
...全文
20 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianshidechibang 2003-08-14
  • 打赏
  • 举报
回复
急!!!!!up
tianshidechibang 2003-08-14
  • 打赏
  • 举报
回复
其实数据库里面有这个表A的,不是去建立这个表的。是如何判断表里的某一字段B的数据更新,另一个字段C是判断B的数据更新的结果。还有加一个字段TIME,数据类型是timestamp的,就是时间磋,我想用的是触发器来判断这个表的变化的。这是我的意思,同意amtyuranus((看看)) 的观点,如何做出来呢?????????
tianshidechibang 2003-08-14
  • 打赏
  • 举报
回复
我刚刚接触MS—SQL,有的不太懂触发器。能不能说详细些的。比如表是a,字段b ,c.其中b 表示数据的表,c表示判断b表中数据更新的。更新的,值为1,不更新,值为0。不好意思了。再加50分
CrazyFor 2003-08-14
  • 打赏
  • 举报
回复
表中加一个timestamp类型的字段.

--------------------

Transact-SQL 参考


timestamp
timestamp 这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的。timestamp 一般用作给表行加版本戳的机制。存储大小为 8 字节。

注释
Transact-SQL timestamp 数据类型与在 SQL-92 标准中定义的 timestamp 数据类型不同。SQL-92 timestamp 数据类型等价于 Transact-SQL datetime 数据类型。

Microsoft® SQL Server™ 将来的版本可能会修改 Transact-SQL timestamp 数据类型的行为,使它与在标准中定义的行为一致。到那时,当前的 timestamp 数据类型将用 rowversion 数据类型替换。

Microsoft® SQL Server™ 2000 引入了 timestamp 数据类型的 rowversion 同义词。在 DDL 语句中尽可能使用 rowversion 而不使用 timestamp。rowversion 受数据类型同义词行为的制约。有关更多信息,请参见数据类型同义词。

在 CREATE TABLE 或 ALTER TABLE 语句中,不必为 timestamp 数据类型提供列名:

CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp)

如果没有提供列名,SQL Server 将生成 timestamp 的列名。rowversion 数据类型同义词不具有这样的行为。指定 rowversion 时必须提供列名。

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

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


请参见

ALTER TABLE

CAST 和 CONVERT

CREATE TABLE

数据类型转换

数据类型

DECLARE @local_variable

DELETE

INSERT

SET @local_variable

UPDATE

©1988-2000 Microsoft Corporation。保留所有权利。
pengdali 2003-08-14
  • 打赏
  • 举报
回复
--用时间磋,如果有记录被改变,它就会自动改变如:

declare @a table (a int,b timestamp)

insert @a (a) values(1)
select * from @a

update @a set a=2

--时间磋被改变
select * from @a
amtyuranus 2003-08-14
  • 打赏
  • 举报
回复
你可以在这个表里加个update触发事情,然后通知你就可以了
pengdali 2003-08-14
  • 打赏
  • 举报
回复
declare @a table (a int,b timestamp)

insert @a (a) values(1)
select * from @a

update @a set a=2

--时间磋被改变
select * from @a
tianshidechibang 2003-08-14
  • 打赏
  • 举报
回复
to lhd_cn(子东):发出这样的错误的,the truncate table statement is not allowed within a trigger,请指明!
tianshidechibang 2003-08-14
  • 打赏
  • 举报
回复
to lhd_cn(子东):请问deleted和inserted什么来的呢?在哪里呢???我想弄明白的。临时表#TMEP在那里呢。我做好后,触发器什么不见了。放在那里呢
to pengdali(大力 V2.0) 看起来很简单,但数据变化跟表变化有区别吗???
pengdali 2003-08-14
  • 打赏
  • 举报
回复
create trigger tr_upd_A On A for insert,update,delete as update 变化表 set 是否变化=1 where 表名='A'
go

你检查变化表后把 是否变化=0
lhd_cn 2003-08-14
  • 打赏
  • 举报
回复
你是说:本来有刷新前数据,但刷新后,先把原来数据全部删除了,后自动添加新的数据。
比如表是a,字段b ,c.其中b 表示数据的表,c表示判断b表中数据更新的。更新的,值为1,不更新,值为0

可以这样试一试:
建立一张和表A结构一样的临时表,
SELECT * INTO #TEMP
FROM 表A
WHERE 1=2

然后建立表A的触发器
Create Trigger check_delup
on 表A
after Insert,delete
as
BEGIN
--删除时
IF exists(select Count(*) from deleted)
BEGIN
TRUNCATE TABLE #TEMP
INSERT INTO #TEMP
SELECT * FROM DELETED
UPDATE #TEMP
SET C = 0
END

--插入时
IF exists(select Count(*) from inserted)
BEGIN
UPDATE 表A
SET C =1
FROM #TEMP,INSERTED INS
WHERE #TEMP.B <> INS.B
END

END
tianshidechibang 2003-08-14
  • 打赏
  • 举报
回复
上楼也可以,但没考虑到更多数据也更新呢
Rivulet119 2003-08-14
  • 打赏
  • 举报
回复
设 表为A(id ,b,c) --其中b为数据,C为修改标志,id为主码

create trigger tr_upd_A
On A
After update
if update(b)
update A set c=1 where id in(select id from deleted)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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