更新命令上的SQL Server错误 - “当前命令发生严重错误”

时间:2009-07-24 00:34:14

标签: sql-server sql-server-2005 tsql

在SQL Server Management Studio中运行以下查询会出现以下错误。

update table_name set is_active = 0 where id  = 3
  

当前命令发生严重错误。结果(如果有的话)应该被丢弃。

  • 日志已被截断
  • 有更新触发器,但这不是问题
  • 交易计数为零(@@ trancount)

我在数据库中的其他几个表上尝试了相同的更新语句,它们工作正常。

DBCC CHECKTABLE('table_name');

给出

DBCC results for 'table_name'.
There are 13 rows in 1 pages for object "table_name".
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

12 个答案:

答案 0 :(得分:45)

我只是遇到了同样的错误,而且它是一个损坏的索引。 重新索引表修复了问题。

答案 1 :(得分:10)

在我的情况下,我使用SubQuery并遇到了同样的问题。我意识到问题是内存泄漏。

重新启动MSSQL服务原因以刷新tempDb资源并释放大量内存。 所以这就解决了这个问题。

答案 2 :(得分:6)

MS KB有3种可能性

当我看到这样的东西时:我总是认为修补程序,引擎,服务器错误等。

4 results: search for ""Msg 0, Level 11,State 0, Line 0" A severe error occurred on the current command"

修改:It's on MS Connect too

答案 3 :(得分:4)

运行DBCC CHECKTABLE('table_name');

检查安装了实例的LOG文件夹(通常为\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG),以查找名为“SQLDUMP*”的任何文件

答案 4 :(得分:3)

一个不同的场景,但同样的错误:当我尝试使用存储过程将记录插入临时表时,我收到此错误。原来,参数不匹配。我试图将BIGINT插入INT。

归功于Vicky Harp:http://vickyharp.com/2012/03/troubleshooting-a-severe-error-occurred-on-the-current-command/

答案 5 :(得分:1)

在我的情况下,我使用System.Threading.CancellationTokenSource取消SqlCommand但未使用catch (SqlException) { }处理例外

答案 6 :(得分:1)

此错误的确切含义是:发生了一些不好的事情,通常不会发生。

在我最近的情况下,真正的错误是:

Msg 9002, Level 17, State 2, Procedure MyProcedure, Line 2 [Batch Start Line 3]
The transaction log for database 'MyDb' is full due to 'LOG_BACKUP'.

这是我要尝试的事情的清单,也许按照这种顺序:

  1. 检查您是否有足够的磁盘空间(这是我的真正问题;我们的NOC没发现这个问题)
  2. 检查内存是否不足
  3. 检查Windows事件日志是否显示任何严重的系统故障,例如硬盘故障
  4. 检查是否有通过扩展过程或SQLCLR不安全程序集加载的不安全代码,这些代码可能会破坏SQLServer.exe进程的稳定性。
  5. 运行CheckDB以查看您的数据库是否存在任何损坏问题。在非常大的数据库上,如果此存储过程仅涉及表的子集,则可以通过查看存储过程涉及哪些分区(文件组)并仅检查那些特定的文件组来节省时间。
    1. 我也会对您的数据库和主数据库执行此操作。

答案 7 :(得分:0)

当您的数据源存在无法处理的通用问题时,似乎会发生这种情况。

就我而言,我插入了一堆数据,索引在表上已损坏,需要重建。我找到了重新构建所有脚本的脚本,似乎已对其进行了修复。为了找到错误,我在数据库上运行了相同的查询-以前已经运行了100多次。

答案 8 :(得分:0)

我在Hangfire中遇到错误,无法访问库的内部工作原理,或者我能够找到主要原因。

基于@ Remus Rusanu的答案,我可以使用以下脚本对此进行修复。

    --first set the database to single user mode
    ALTER DATABASE TransXSmartClientJob
    SET SINGLE_USER
    WITH ROLLBACK IMMEDIATE;
    GO

    -- Then try to repair
    DBCC CHECKDB(TransXSmartClientJob, REPAIR_REBUILD)

    -- when done, set the database back to multiple user mode
    ALTER DATABASE TransXSmartClientJob
    SET MULTI_USER;
    GO

答案 9 :(得分:0)

在同一服务器上的多个数据库/表中遇到此问题后,我们刚刚找到了另一个可能的解决方案。

是否打开了到sql服务器的最大连接数。我们有一个没有关闭SQL连接并保持打开状态的应用程序,因此我们运行的连接数约为28K-31K(SQL Sever的最大值为32K ish),并且我们注意到,一旦我们杀死了数千个睡眠连接它解决了此问题上列出的错误。

解决方法是更新应用程序,以确保它们关闭了连接而不是保持打开状态。

答案 10 :(得分:0)

在我的情况下,方法:context.Database.CreateIfNotExists();在创建数据库之前多次调用并导致错误崩溃当前命令上发生了严重错误。结果(如果有的话)应该被丢弃。

答案 11 :(得分:0)

就我而言,这是其他原因,+= 运算符导致了这种情况。我不得不用 += X 替换 field = field + X 来克服这个问题。虽然我无法在 Microsoft 网站上找到任何相关的知识库,但我认为这是一个错误。

我使用的是 SQL Server 2008 R2(10.50.1600)。