导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

UPDATE有时不成功

jronald 2007-12-19 11:45:07
从原始表生成临时表,用UPDATE更新之,有时不成功,这时把没有功更的新临时表删掉,用同样的方法重新生成,却可以,这是为什么?
(逻辑非常简单,会不会是同步问题,要怎么解决)
下面是部分代码,其是ma12,ma26也是临时表中的数据,是前面刚刚更新过的

for (UINT i=start;i<CntTotalGrp;++i) {
SqlCmd.Format("UPDATE %s SET a="
"(SELECT TOP 1 ma12 FROM %s WHERE ID=%u)"
"-(SELECT TOP 1 ma26 FROM %s WHERE ID=%u)"
"WHERE ID=%u",
TmpTblName,TmpTblName,i-2,TmpTblName,i,i);
m_pConn->Execute(_bstr_t(SqlCmd),NULL,adCmdText);
}
...全文
70 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rouqu 2007-12-19
如果已经提交语句且执行完毕,你就可以认为他们已经写到数据库里

update对语句加排他锁 要不blocking状态等待获取该锁(这时也可被他读) 要不直接获取该锁后执行更新再释放(再次读取为更新数据)
回复
jronald 2007-12-19
表名不带# 或 ## , 功能上和普通表一样

功能上非常简单,一条线下来的,不会有问题,

如果是ma12 ma26提交问题的话,怎么保证在用到ma12 ma26时保证他们已经写到数据库里了?
回复
rouqu 2007-12-19
看你的操作是对该表ma26、ma12两字段做差值再更新到a

如果要保存这种变化 就不必用临时表了
回复
Haten 2007-12-19
将SQL语句在查询分析器中执行看看是否报错。
回复
rouqu 2007-12-19
你这个临时表是定义的表变量还是#表or##表? 这三种都不能永久保存
回复
dawugui 2007-12-19
如果不是临时表,数据不准确的话
只有两个可能,
1,数据没提交成功.
2.SQL语句不正确,比如条件是否考虑周全.
回复
junshanhudazhaxi 2007-12-19
顶一下
回复
jronald 2007-12-19
这个临时表是相对于应用程序来说的,性质上和普通的表一样,永久保存,名字固定
回复
dawugui 2007-12-19
从原始表生成临时表

不用临时表.临时表不固定,每次都不同.

要用一个临时使用的表或称固定表,用完后删除.
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告