- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的存储过程:
USE [DBName]
GO
/****** Object: StoredProcedure [dbo].[ProcName] Script Date: 10/03/2012 12:10:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ProcName](@filter bigint, @n int)
AS
DELETE FROM TableName WITH (READPAST, UPDLOCK, ROWLOCK) OUTPUT(DELETED.ColumnName2)
WHERE TableName.ID in (select top (@n) ID from TableName where TableName.ColumnName1 = @filter)
此过程返回 ColumnName2 的前@n 个值(这些值表示的记录将从表中删除)。我正在使用 vb 方法中的这个存储过程,它通常运行良好。但是,有时,由于我不知道的原因,它会抛出异常:
You can only specify the READPAST lock in the READ COMMITTED or REPEATABLE READ isolation levels.
我的 vb 方法调用这个存储过程,如果它没有获得足够的值,那么它会生成新值并调用这个存储过程。重复此操作,直到有足够的值。本质上,TableName 就像一个队列一样工作,我的 vb 方法运行良好,但是,有时会抛出上述异常。是什么原因导致的?我的问题的解决方案是什么?
我试图仅为调用我的存储过程的代码启动一个新连接,但无济于事,因为再次抛出异常。尽管我已经阅读了以下文章,但我不知道解决方案是什么:
http://www.red-gate.com/messageboard/viewtopic.php?t=13614
.NET READPAST lock error when calling a stored procedure
http://support.microsoft.com/kb/981995
提前感谢您的帮助,
Lajos Árpád。
最佳答案
这应该可以解决您的问题
ALTER PROCEDURE [dbo].[ProcName](@filter bigint, @n int)
AS
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
DELETE FROM TableName WITH (READPAST, UPDLOCK, ROWLOCK) OUTPUT(DELETED.ColumnName2)
WHERE TableName.ID in (select top (@n) ID from TableName where TableName.ColumnName1 = @filter)
由于您正在使用需要此设置的 READPAST,您最好在 SP 中明确设置它,前提是它的范围是安全的。
If you issue SET TRANSACTION ISOLATION LEVEL in a stored procedure or trigger, when the object returns control the isolation level is reset to the level in effect when the object was invoked.
引用:SET TRANSACTION ISOLATION LEVEL
至于为什么会这样,一个可能的原因是 SQL 调用之间的连接池和混合事务隔离级别。
关于sql-server - 新连接的 READPAST 锁问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12705477/
我有一个从多个线程调用的进程,它执行以下操作: 开始交易 通过查找 IsProcessed=0 的下一行从工作表中选择工作单元有提示(UPDLOCK, HOLDLOCK, READPAST) 处理工作
我们正在考虑开启读取提交的快照隔离级别来帮助解决我们的一些表锁定问题。 我们有一些存储过程使用表提示 WITH (ROWLOCK, READPAST) 作为 queuing based table s
我有一个如下所示的存储过程: USE [DBName] GO /****** Object: StoredProcedure [dbo].[ProcName] Script Date: 10/
我们需要另一个大规模更新,因为存在大量锁定问题的风险,因此需要停机。基本上,我们希望在工作时间内更新数亿行。 现在,将更新减少到可管理的 0 BEGIN UPDATE TOP (5000) T
理解最终决策就是业务决策,SQL 2008 R2 中运行NOLOCK & READPAST 之间的准确性考虑是什么?在与业务领域讨论变化之前,我想有一个更好的了解。 我继承了许多查询,用于为管理报告创
有没有办法在 Entity Framework LINQ 查询中使用/发出 SQL Server READPAST 表提示? 最佳答案 EF 不支持表提示。如果您需要编写带有表提示的查询,您必须直接使
我们有一个系统,可以同时插入来自多个站点的大量数据,同时还暴露一个数据查询接口(interface)。架构看起来像这样(很抱歉格式不佳): [SyncTable] SyncID Station
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 9 年前。 Improve
有没有办法在 Entity Framework LINQ 查询中使用/发出 SQL Server READPAST 表提示? 最佳答案 EF 不支持表提示。如果您需要编写带有表提示的查询,您必须直接使
我们有一个表,它通过数据库作业每约 15 分钟刷新一次,以使用来自各种来源的最新更改来保持前端更新。 过去为了读取这个表,调用了一个带有表提示 READPAST 的存储过程。我相信的目的是确保表格可以
场景 我编写了一个压力测试,它向总线发送 100 个 GenerateFile 命令。我知道这个过程是有效的,因为所有 100 个文件都已按预期创建。 症状 但是在服务日志中我发现了这些警告: War
在 SQL Server 中,我在查询中使用了以下提示: rowlock(行级锁定) updlock(防止脏读) readpast(不要阻塞等待行锁,转到第一个解锁的行) 例如 select top
我需要使用一些 SQL 表来设置队列系统,就像 here 中描述的那样.那就是,因为我需要按不同的标准过滤排队的项目,所以在我使用的存储过程中 BEGIN TRANSACTION CREATE TAB
为了避免死锁和同步来自多个服务的请求,我使用了 ROWLOCK、READPAST。我的问题是我应该将它放在包含 CTE、子查询和 CTE 更新语句的查询中的什么位置?有一个关键点还是三个地方都应该有(
我是一名优秀的程序员,十分优秀!