学习贴

liangpei2008 2008-07-16 05:56:43
加精
高手请略过~
以前知道这种写法,但没分析过原理!

--想实现效果:同时修改ID与OK,OK字段依附于ID
DECLARE @T1 INT
DECLARE @T TABLE(ID INT,OK INT)
INSERT @T SELECT 1,1
UNION ALL SELECT 2,1
--第一种方法错误
UPDATE @T
SET ID=3,OK=ID
WHERE ID=2
--第二种方法正确
UPDATE @T
SET @T1=3, OK=@T1,ID=3
WHERE ID=2
SELECT * FROM @T

个人观点:
推理:在更新时,由于先更新的字段ID被加上排它锁,导致OK不能正常更新
...全文
850 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonggulu 2008-07-22
  • 打赏
  • 举报
回复
***************************************************************************

思想决定行动,行动决定习惯,习惯决定命运.
程序员在深圳QQ群,交流思想,如饮美酒.

部份专业群介绍:
c++群: 15195967(此群流动性相当大,有时候一个月上百人被迫离群)
java群: 11878667(此群人数较少,但不知道群主会不会让你进群,进群要求很高)
英语学习群: 23864353(此群人气一般,交流也车不够活跃)
c++Ⅱ: 17409451(此群是C++第一群的补充,人气自然差点)
嵌入式开发群: 37489763(此群高手还是有的,气氛一般)
移动开发群: 31501597(此群人气和氛围都还可以)
创业群: 33653422(此群名字就注定了讨论的东西一般没有结果.)


部份高级程序员群(高级群致力于发现和培养专家,人气最旺,淘汰率高,不自信者不要加入):

高级群I:17538442
高级群II:7120862

部份初、中级程序员群:
第三群:2650485
第五群:29537639
第四群:28702746
第六群:10590618
第七群:10543585
第八群:12006492
第九群:19063074
第十群:2883885
第十一群:25460595
第十二群:9663807

深圳程序员QQ群联盟成立2005年,拥有三十个以上的QQ群,人数超三千多人,大量高手,从业于大公司(微软、IBM,SUN,华为)、系统分析员(包括参加过上亿元的项目的架构师)。每个人都自信而上进.推荐:深程高级群I:17538442 深程高级群II:7120862 (深程高级群不欢迎新手,如果在深圳,月薪6K以下的别加入) c++:15195967 java群: 11878667 mobile:31501597嵌入式:37489763
——————————————————————————————————————————
如果你不是第一次看到此广告,说明我们最近T了一些人,因为我们要不断提升群的质量,保证名副其实.
-------------------------------------------------------------------------------------
在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到:
1. 通读手册,试着自己找答案。
2. 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。
3. 在网上搜索(个人推荐google~)。
4. 向你身边精于此道的朋友打听。
我想我们首先应该靠自己解决问题,然后才是问
------------------------------------------------------------------------------------------------------

技术QQ群是一个体现群体智慧的地方,无价值的发言会给别人带来噪音和负担,如果不同意以上观点的请勿加入!

*****************************************************************************
DumDum 2008-07-22
  • 打赏
  • 举报
回复
比较赞同SmallHand 的意见~~!
Chair_fat 2008-07-21
  • 打赏
  • 举报
回复
学习
zhuangfayang 2008-07-20
  • 打赏
  • 举报
回复
对了
火龙岛主 2008-07-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liangpei2008 的回复:]
JJ大哥,是2条独立的语句,应该单独运行。
否则第一个错误的语句处理完毕后对第二条的结果有影响!:)
可能是我说的不清楚!
测试环境MSSQL 2005

SQL code
--第一种方法错误
DECLARE @T TABLE(ID INT,OK INT)
INSERT @T SELECT 1,1
UNION ALL SELECT 2,1
UPDATE @T
SET ID=3,OK=ID
WHERE ID=2
SELECT * FROM @T
1 1
3 2
--第二种方法
DECLARE @T1 INT
DECLARE @T TABLE(ID INT,OK INT)
INSERT @T…
[/Quote]
在sqlserver2000下,结果是一样的

我的理解是:
UPDATE @T
SET ID=3,OK=ID
WHERE ID=2
此时OK的值取的还是ID旧值,并没有取ID的新值,因此结果是
ID OK
----------- -----------
1 1
3 2


UPDATE @T
SET @T1=3, OK=@T1,ID=3
WHERE ID=2
变量@T1=3,先赋值,然后又进行了更新,也就是说变量函数运算的优先级高于
更新赋值的优先级。

如果放在一起执行的话,第二次更新实际上是没有执行更新操作,因为此时的
ID 已经等于 3 了。ID=2已经不存在了。




shaxian 2008-07-20
  • 打赏
  • 举报
回复
学习了,路漫漫路漫漫其修远兮!
zhuxixi6886 2008-07-19
  • 打赏
  • 举报
回复
学习~~
w358581619 2008-07-19
  • 打赏
  • 举报
回复
asdasdasdasd
asd
asd
asd
asd
asd
JYYCOM 2008-07-19
  • 打赏
  • 举报
回复
多谢楼主的分享精神!
顶!
ljqforever520 2008-07-19
  • 打赏
  • 举报
回复
你们写的对于我这个新手来说完全是 .......
fisea 2008-07-19
  • 打赏
  • 举报
回复
多谢lz!怎么没有delphi的。我最近在学习delphi就是找不到好的学习视频。
zhfeir 2008-07-18
  • 打赏
  • 举报
回复
学习。
fengt 2008-07-18
  • 打赏
  • 举报
回复
不错,学习下
vensen8088168 2008-07-18
  • 打赏
  • 举报
回复
vxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
jiang_chao 2008-07-17
  • 打赏
  • 举报
回复
学习学习
liangpei2008 2008-07-17
  • 打赏
  • 举报
回复
JJ大哥,是2条独立的语句,应该单独运行。
否则第一个错误的语句处理完毕后对第二条的结果有影响!:)
可能是我说的不清楚!
测试环境MSSQL 2005

--第一种方法错误
DECLARE @T TABLE(ID INT,OK INT)
INSERT @T SELECT 1,1
UNION ALL SELECT 2,1
UPDATE @T
SET ID=3,OK=ID
WHERE ID=2
SELECT * FROM @T
1 1
3 2
--第二种方法
DECLARE @T1 INT
DECLARE @T TABLE(ID INT,OK INT)
INSERT @T SELECT 1,1
UNION ALL SELECT 2,1
UPDATE @T
SET @T1=3, OK=@T1,ID=3
WHERE ID=2
SELECT * FROM @T
1 1
3 3
liuzhen86912 2008-07-17
  • 打赏
  • 举报
回复
学习,学习。。。改天切磋切磋。。。现在还在学习中。。。。。
jishu_vip 2008-07-17
  • 打赏
  • 举报
回复
学习之……
eclipes 2008-07-17
  • 打赏
  • 举报
回复
学习学习
mk
jinjazz 2008-07-17
  • 打赏
  • 举报
回复
set nocount on
DECLARE @T1 INT
DECLARE @T TABLE(ID INT,OK INT)
INSERT @T SELECT 1,1
UNION ALL SELECT 2,1
SELECT * FROM @T
--第一种方法错误
UPDATE @T
SET ID=3,OK=ID
WHERE ID=2
SELECT * FROM @T
--第二种方法正确
UPDATE @T
SET @T1=3, OK=@T1,ID=3
WHERE ID=2
SELECT * FROM @T
set nocount off

/*
ID OK
----------- -----------
1 1
2 1

ID OK
----------- -----------
1 1
3 2

ID OK
----------- -----------
1 1
3 2
*/
加载更多回复(22)

2,495

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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