【发布时间】:2011-06-18 20:46:43
【问题描述】:
更新
本练习的目的是消除再次传递@RegModifiedDateTime 我想要的是我应该能够通过传递Id 来阅读ModifiedDateTime
示例:如果我通过 Id = 564 那么我应该能够阅读
`schoold_Id and ModifiedDateTime`
结束更新
这是我的表在 SchoolRegistration 中的样子:
school_id id active modifydatetime
--------------------------------------------------
432 564 1 2008-12-14 13:15:38.750
342 564 1 2008-12-14 14:15:50.470
353 564 1 2008-12-14 14:19:46.703
结束更新
如何循环更新我的 SchoolRegistration 表? id 在 SchoolRegistration 中可能有 1 行或多行,但问题是 RegModifiedDateTime 是唯一用于并发目的的,我应该循环获取该 id 的正确修改日期时间。
alter procedure [dbo].[del_schoolRegistration]
@Id bigint,
@RegModifiedDateTime datetime
as
begin
declare @rowsAffected int
begin tran
--registration
update SchoolRegistration
set Active = 0,
ModifiedDateTime = getdate()
where (Id = @Id and RegModifiedDateTime = @RegModifiedDateTime or @RegModifiedDateTime is null )
if (@rowsAffected < 1) begin
rollback tran
end
else begin
commit tran
end
return @rowsAffected
end
【问题讨论】:
-
为什么你需要在
CURSOR上做这个UPDATE?,你不能只做一个UPDATE吗?另外,我相信您的条件OR @RegModifiedDateTime is null是错误的,因为当该列为空时,它会更新您的整个表,而不仅仅是@id -
RegModifiedDateTime 是唯一的并发目的,它应该循环获取该 id 的正确 modifydatetime。
-
@Abu Hamzah “对于并发目的是独一无二的”,您将不得不解释这一点。 getdate() 上的解决方案也会给你带来问题
-
@Abu。我不明白什么样的系统需要具有唯一约束的 modifydatetime 字段。
-
@Abu Hamzah 乐观并发不需要这个。为什么会这样?
标签: sql sql-server-2008