2012-04-17 30 views
0

我在SQL Server 2008 R2在我的数据库这个非常简单的查询:SQL Server 2008中 - UPDATE写不完

UPDATE Table1 
    SET Field1 = 'This value' 
WHERE ID  = '12345' 

我试图执行这个查询和我从来没有得到成功的结果。首先,它执行很长时间。有一次,我执行这个查询,并在我吃午饭的时候把它留在那里。当我2个小时后回来时,它仍然没有完成。

我需要以编程方式执行此查询。我有一切需要在那里执行它,但现在唯一的问题是,它给了我一个“超时”错误消息。我试图增加我的CommandTimeOut,但这样做会持续更长的时间。 (由于在SQL Server中执行查询确实需要很长时间,请参阅前面的示例)

有人可以请我指出一个很好的解决方案以避免此问题吗?是的,我正在访问的桌面有很多像千人一样的记录。这从来没有成为一个问题,但现在它是。 :(

感谢提前:)

+0

有两个问题:(1)“ID”列中是否存在**索引**?和(2) - 什么样的数据类型是'ID'?如果它是数字数据类型,则不应使用字符串来指定您的ID - 请使用'WHERE ID = 12345'(不带引号)。和PS:*成千上万*的行是**没有** - 如果我们正在谈论几亿 - 那么我们有“很多”...... – 2012-04-17 05:39:36

+0

你想要改变多少行?你看过SQL分析器吗?你运行过类似的查询吗('where id ='23456'')? – hkf 2012-04-17 05:41:19

+1

“很多记录像数千” - 这是很少的行数。换言之,1亿是相当大的。 – 2012-04-17 05:42:54

回答

4

听起来像是你敞开的,锁定了这一行ID为12345交易该命令将从未结束,直到你提交或回滚事务。

打开Activity Monitor并查看哪些交易阻止了您的更新。然后找到未运行此事务并提交或回滚的未提交的SSMS窗口。

详情请参阅Understanding and resolving SQL Server blocking problems。有关一般性能故障排除方法,请参见Waits and Queues

+1

+1。伟大的心灵调试! – 2012-04-17 05:49:30

+0

+ 100000。这正是我所需要的。显然,其他一些SELECT语句锁定了同一行。非常感谢你!这让我想起了WITH(NOLOCK)关键字。 – Smiley 2012-04-17 07:29:06