一个表不能有两个时间戳列吗

xman109 2008-03-31 02:50:36
请问一个表中不能有2个时间戳列吗
...全文
549 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dobear_0922 2008-03-31
  • 打赏
  • 举报
回复
标识列只能一个,时间戳列只能一个,,,
wangxuelid 2008-03-31
  • 打赏
  • 举报
回复
创建时间戳列

一个 SQL Server 时间戳列包含由 SQL Server 生成的唯一值,当更改服务器记录时,会更新这个值。在一个可更新的远程表中包含一个时间戳字段会提高性能和可靠性。
如果您使用 Visual FoxPro SQL WhereType 值 DB_KEYANDMODIFIED 或 DB_KEYANDUPDATABLE 更新字段,Visual FoxPro 必须检查所有修改或可更新的字段,以确定它们是否被另一个用户更改了。由于文本或图像字段字节数很多,比较这些字段的更改会增加网络负担,并且很费时间,也就降低了性能。同时也可能影响系统的可靠性,因为在客户和服务器之间转换一个浮点字段的值就可能使该值显得是被更改过,而实际上却没有。

当您向一个远程表中添加一个时间戳,并使用 SQL WhereType 值 DB_KEYANDTIMESTAMP 更新时,Visual FoxPro 只使用时间戳字段中的值确定在更新一个记录之前该记录是否被更改了。由于 Visual FoxPro 比较时间戳字段中的值与计算有大量文字和图片的内容字段相比要快得多,因此可以提高对远程数据进行操作的性能。但是,如果您使用 SQL WhereType 值 DB_KEYANDTIMESTAMP
进行更新,对于远程记录的任何更改都被看成是一个更新冲突,不管被更改的字段是否位于远程视图的可修改字段列表中。

如果使用 Visual FoxPro SQL WhereType 值 DB_KEYANDMODIFIED 更新字段,如果将远程视图的 CompareMemo 属性设置为“假”(.F.) 会提高性能。当 CompareMemo 属性设置为“假”时,会从远程视图字段列表中移去备注字段,在该列表中的远程视图字段与远程服务器中的记录进行比较。
wangxuelid 2008-03-31
  • 打赏
  • 举报
回复
为合并复制制定计划
合并复制需要在以下方面制定计划:

timestamp 列。


标识范围。


数据完整性。


主键。


与可选同步伙伴同步。


行级跟踪和列级跟踪。


触发器和业务规则。


合并复制中的 text 和 image 数据类型。


冲突解决。


联机/脱机应用程序的临时维护
timestamp 列
合并复制支持 timestamp 列。虽然复制 timestamp 列,但不复制 timestamp 的字面值。当在订阅服务器处应用初始快照行时,将重新生成 timestamp 值。这将允许订阅服务器处的客户端应用程序使用 timestamp 值以执行像乐观并发控制这样的功能。在那些情况下,用于执行乐观并发控制的 ODBC 驱动程序、OLE DB 提供程序、DB-Library 游标或服务器游标会对更新行的 timestamp 值与原始行的当前值进行进行比较。如果 timestamp 值不相同(表示某一行已经更改),那么应用程序能够执行适当的操作(例如回滚事务或重读数据)。因为 timestamp 值在订阅服务器重新生成,所以当执行项目验证时,将筛选出 timestamp 列。

数据完整性
因为合并复制可传播在订阅服务器处所做的更改,所以必须确保在各个订阅服务器处保留应用程序的完整性。所有用来验证发布服务器处数据更改的表应当也位于订阅服务器上。

提供选项以确保由合并代理程序用来连接发布服务器的登录也可用于控制以下情况:只有经过身份验证用户才能将在订阅服务器上所作的数据更改传播到发布服务器。

外键
当创建合并发布时,指定作为项目包含在此发布中的表。如果包含带有外键的表,那么所引用的表也应包含在发布中。如果试图向引用某个主键的项目中添加新行,而该主键位于缺少的表中,那么插入将失败,因为 SQL Server 2000 无法找到所需的主键。如果试图更新项目中现有行中的数据,那么更新将成功,因为 SQL Server 2000 不必添加新行和关键字。

在创建合并发布后,可对其进行修改以包含附加的项目。如果发现必须用额外的行来更新项目,而不仅仅靠对现有行的修改来更新,那么可向发布中添加任何缺少的引用表。请使用发布属性对话框添加缺少的表。

与可选同步伙伴保持同步
要合并发布的订阅服务器可与订阅起源所在的发布服务器以外的其它服务器保持同步。与可选同步伙伴的同步使得订阅服务器即使在主发布服务器不可用的情况下仍可同步数据,或由于物理位置可与另一同步伙伴连接(例如,正访问远程办公室且可以与那里的可选同步伙伴连接)的情况下,仍可使数据同步。

应该决定合并复制订阅服务器是否有必要拥有可选同步伙伴,并为同步准备这些备用服务器。

有关更多信息,请参见可选同步伙伴。

冲突检测和解决
在决定合并复制冲突的检测和解决方案时,可指定是在行级识别冲突,还是在列级识别冲突。

决定是使用行级跟踪还是列级跟踪,应根据是将行内的任何更改视为冲突(行级跟踪),还是允许不同的用户同时更新同一行而不是同步处理间的同一列(列级跟踪)。

选择使用行级还是列级跟踪应当基于应用程序,以及是要将对表中同一行的任何更改当作冲突,还是不同的用户可以同时更新同步处理间的同一行,而不是同一列。例如,在某些应用程序中,通过使用列跟踪来合并对不同列的更改视为是可接受的。这意味着如果发布服务器更改了列 1,订阅服务器更改了列 2,合并进程接受发布服务器对列 1 所做的更改以及订阅服务器对列 2 所做的更改。而有些应用程序可能要求对多个站点的相同行所做的更改(即使值位于不同列)应视为冲突,并在行级进行检测和解决。

有关更多信息,请参见合并复制冲突的检测和解决。

触发器和业务规则
您应当清楚所复制表上的所有触发器和约束。在未制定计划的情况下,触发器和约束可与表一起复制,并可导致合并复制过程中反复出现冲突。有关更多信息,请参见发布数据和数据库对象和使用 NOT FOR REPLICATION。

合并复制中的 text 和 image 数据类型
只有当 UPDATE 语句显式修改过 text、ntext 和 image 列时,合并复制才会支持对这些列的复制,因为这将导致触发器激发更新元数据以确保事务传播到其它订阅服务器。

只使用 WRITETEXT 和 UPDATETEXT 操作不会将更改传播至其它站点。如果应用程序使用 WRITETEXT 和 UPDATETEXT 更新 text 或 ntext 列,请在同一事务中,显式地将一个虚 UPDATE 语句添加到 WRITETEXT 或 UPDATETEXT 操作之后,以启动触发器,因而保证更改将传播到其它站点。

示例

使用 Northwind 数据库并更新 Employees 表中的 Notes 列(数据类型为 ntext):

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
DECLARE @mytextptr varbinary(16)
SELECT @mytextptr = textptr(Notes)
FROM Employees
WHERE EmployeeID = '7'
IF @mytextptr IS NOT NULL
BEGIN
UPDATETEXT Employees.Notes @mytextptr 0 NULL 'Terrific job this review period.'
-- Dummy update to fire trigger that will update meta data and ensure the update gets propagated to other Subscribers.
UPDATE Employees
-- Set value equal to itself.
SET Notes = Notes
WHERE EmployeeID = '7'
END
COMMIT TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED




联机/脱机应用程序的临时维护
在为使用复制的联机/脱机应用程序制定计划时,要计划应用程序部署的临时维护以及把新数据集传输到脱接订阅服务器的方法。

尽管 SQL Server 2000 复制允许对临时连接或使用慢速链接的订阅服务器进行充分的数据访问,仍需为应用程序的临时维护制定计划,可能的话还需为在订阅服务器中重新应用快照制定计划。

kaikai_kk 2008-03-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyflystone 的回复:]
一个表只能有一个 timestamp 列
[/Quote]

只能有一个
-狙击手- 2008-03-31
  • 打赏
  • 举报
回复
一个表只能有一个 timestamp 列

34,837

社区成员

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

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