请大家帮我看看这个问题,太奇怪了。通过一张表更新另一张表某一字段的问题。

believebowps 2011-12-13 09:05:52
update a set a.student_syszddm=b.dwszddm from stuinfos_base a,Confer_dwszddm b where a.student_syszdmc =b.dwszd and a.student_year=' '

这是一条非常普通的SQL语句,不过我现在遇到一个非常稀奇的问题!
我需要使用 Confer_dwszddm(这张表有3000多条记录)里面的 dwszddm 字段的内容 去填充 stuinfos_base(这张表有11万条记录)里面的 student_syszddm 字段。前提条件是 两张表的 a.student_syszdmc =b.dwszd 字段要相同。
然后我再通过a.student_year=' '来确定年份。
我在匹配 2005届、2006届、2007届 ·····到2011届数据,更新执行都非常迅速。但是 2012届的数据,就出现问题了。老是提示我 超时。
我就纳闷了,都是一张表里面的数据,为什么,前几年的数据,我执行更新就没问题。偏偏这个最新的数据就出现这种 超时,没法匹配的情况。


请大家帮我分析一下。
...全文
382 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2011-12-14
  • 打赏
  • 举报
回复
应该是2012届的资料被锁住了,
更新前,执行以下SQL,可以查询出当前锁住该表的sql有哪些.

use Sd_zjc_career_web_netconfer

select c.spid,d.text
from sys.dm_tran_locks a,
sys.sysprocesses c
cross apply sys.dm_exec_sql_text(c.sql_handle) d
where a.request_session_id=c.spid
and a.resource_database_id=db_id('Sd_zjc_career_web_netconfer')
and a.resource_type='OBJECT' and
a.resource_associated_entity_id=object_id('stuinfos_base')
believebowps 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 ap0405140 的回复:]

SQL code

-- 把这个执行结果贴来看看
-- SQL1
select student_year,count(*) c
from stuinfos_base
group by student_year

-- SQL2
sp_helpindex stuinfos_base
[/Quote]

第一个
2005届毕业生 12883
2009届毕业生 15792
2007届毕业生 18416
2010届毕业生 13707
2012届毕业生 10860
2011届毕业生 9205
2008届毕业生 16372
2006届毕业生 14571

第二个
PK_stuinfos_base clustered, unique, primary key located on PRIMARY id

唐诗三百首 2011-12-14
  • 打赏
  • 举报
回复
恭喜楼主.

-晴天 2011-12-14
  • 打赏
  • 举报
回复
哈哈.看来还是我说得对!
believebowps 2011-12-14
  • 打赏
  • 举报
回复
61 select top 50 * from zjc_student_card_explorer where student_year='2012届毕业生' and (card_public_status=1 and sd_list_public_status=1 and card_college_status=1 and sd_list_college_status=1) order by id desc

这是我执行更新以后,过时操作提示出来
我执行
use Sd_zjc_career_web_netconfer

select c.spid,d.text
from sys.dm_tran_locks a,
sys.sysprocesses c
cross apply sys.dm_exec_sql_text(c.sql_handle) d
where a.request_session_id=c.spid
and a.resource_database_id=db_id('Sd_zjc_career_web_netconfer')
and a.resource_type='OBJECT' and
a.resource_associated_entity_id=object_id('stuinfos_base')


得到的结果。
我总算知道原因了。
believebowps 2011-12-14
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 ap0405140 的回复:]

应该是2012届的资料被锁住了,
更新前,执行以下SQL,可以查询出当前锁住该表的sql有哪些.
SQL code

use Sd_zjc_career_web_netconfer

select c.spid,d.text
from sys.dm_tran_locks a,
sys.sysprocesses c
cross apply sys.dm_exec_sql_text(c.sq……
[/Quote]


太感谢你了,我总算找到原因了
原来是用人单位通过WEB平台在访问2012届毕业生的资料。
看来我只有把web访问全部关闭以后,再对2012届毕业生的信息进行更新了。
-晴天 2011-12-13
  • 打赏
  • 举报
回复
是不是有其他操作,锁住了 stuinfos_base 表,而锁住的那条记录,就是 2012 届的?
唐诗三百首 2011-12-13
  • 打赏
  • 举报
回复
检查stuinfos_base表上是否有update触发器?
believebowps 2011-12-13
  • 打赏
  • 举报
回复
同志们,我要崩溃了。
我用这条语句 把2012届的数据独立出来了。
select * into 单独数据2012届 from stuinfos_base where student_year='2012届'
然后我再使用
update a set a.student_syszddm=b.dwszddm from 单独数据2012届 a,Confer_dwszddm b where a.student_syszdmc =b.dwszd and a.student_year='2012届'

结果怎样你们猜??
瞬间完毕更新!!
我无语了。
believebowps 2011-12-13
  • 打赏
  • 举报
回复
同志们,我要崩溃了。
我用这条语句 把2012届的数据独立出来了。
select * into 单独数据2012届 from stuinfos_base where student_year='2012届'
然后我再使用
update a set a.student_syszddm=b.dwszddm from stuinfos_base a,Confer_dwszddm b where a.student_syszdmc =b.dwszd and a.student_year='2012届'

结果怎样你们猜??
瞬间完毕更新!!
我无语了。
gogodiy 2011-12-13
  • 打赏
  • 举报
回复

select a.*,b.* from stuinfos_base a,Confer_dwszddm b where a.student_syszdmc =b.dwszd and a.student_year=' '
单独执行查询看看慢不慢,是什么结果

dawugui 2011-12-13
  • 打赏
  • 举报
回复
但是 2012届的数据,就出现问题了。

-->

先查询一下2012届的数据,看看什么情况?
pengxuan 2011-12-13
  • 打赏
  • 举报
回复
单独更新一下2012的数据试试看什么效果
fuxiyang 2011-12-13
  • 打赏
  • 举报
回复
楼主不来互动啊
一十七 2011-12-13
  • 打赏
  • 举报
回复
帮楼主顶,请高手帮忙。
fuxiyang 2011-12-13
  • 打赏
  • 举报
回复
stuinfos_base.student_year是什么格式存储的?
--小F-- 2011-12-13
  • 打赏
  • 举报
回复
有不规则的数据?
  • 打赏
  • 举报
回复



贴出来语句看一下,是不是你的2011年的数据比之前年的数据要大?
唐诗三百首 2011-12-13
  • 打赏
  • 举报
回复

-- 把这个执行结果贴来看看
-- SQL1
select student_year,count(*) c
from stuinfos_base
group by student_year

-- SQL2
sp_helpindex stuinfos_base
believebowps 2011-12-13
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 ap0405140 的回复:]

SQL code

-- 查触发器是这么查的吗??
exec sp_depends stuinfos_base

-- 应该这样查的吧.
select * from sysobjects
where xtype='TR' and parent_obj=object_id('stuinfos_base')
[/Quote]

呵呵,查询了,什么也没有!
加载更多回复(7)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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