【发布时间】:2013-11-18 14:00:13
【问题描述】:
我正在使用以下代码:
'item being 14
mySQLdel = "DELETE FROM table WHERE ID= " & item
response.write "<p>SQL Command: " & mySQLdel & "</p>"
myConn.Execute(mySQLdel)
id 为 14 的记录是否存在,我得到:
从 ID=14 的表中删除
Microsoft OLE DB Provider for SQL Server 错误“80040e31”
查询超时
/index.asp,第 58 行
第 58 行是:
myConn.Execute(mySQLdel)
等效的命令可以在另一个表上正常工作,所以我认为它与权限有关,尽管我一生都无法弄清楚是什么。
当我在 SQL Management Studio 中运行相同的 SQL 时,查询几乎立即执行。
这是下面请求的创建脚本:
USE [user1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tablename](
[id] [int] IDENTITY(1,1) NOT NULL,
[var1] [nvarchar](max) NULL,
[var2] [int] NULL,
[var3] [int] NULL,
[var4] [nvarchar](50) NULL,
[datecreated] [datetime] NULL
) ON [PRIMARY]
GO
sys.dm_os_waiting_tasks 显示
+----------------------+------------+-----------------+------------------+-----------+--------------------+-----------------------+---------------------+--------------------------+--------------------------------------------------------------------------------------------------+--+
| waiting_task_address | session_id | exec_context_id | wait_duration_ms | wait_type | resource_address | blocking_task_address | blocking_session_id | blocking_exec_context_id | resource_description | |
+----------------------+------------+-----------------+------------------+-----------+--------------------+-----------------------+---------------------+--------------------------+--------------------------------------------------------------------------------------------------+--+
| 0x00000000041F7288 | 63 | 0 | 7139 | LCK_M_U | 0x00000000869F2C40 | NULL | 69 | NULL | ridlock fileid=1 pageid=214 dbid=61 id=lock847e0b00 mode=U associatedObjectId=72057594039435264 | |
+----------------------+------------+-----------------+------------------+-----------+--------------------+-----------------------+---------------------+--------------------------+--------------------------------------------------------------------------------------------------+--+
有什么想法吗?
谢谢。
【问题讨论】:
-
这是您的确切查询还是您使用的是参数化查询?如果不是您的确切查询,请发布实际查询和包含索引的表定义。
-
这看起来像是用大锤敲碎了坚果,但是你能不能把你的删除命令变成一个存储过程。另外,您是否尝试过通过 Native Client 而不是 SQLOLEDB 进行连接? connectionstrings.com/sql-server
-
桌面上有触发器吗?当 Web 应用查询运行时,
SELECT * FROM sys.dm_os_waiting_tasks WHERE session_id > 50是否返回任何内容? -
很难知道为什么相同的查询会被 Web 应用程序阻止,而不是 SSMS。桌子上有触发器吗?如果不是,我假设必须是不同的执行计划。表上有哪些索引?它是否被任何外键引用?
-
还有什么是
session_id = 69?看起来它可能是一个空闲的未提交事务。这不是你的 SSMS 窗口吗?
标签: sql sql-server asp-classic