是否概述了所有SQL Server 2012错误代码?

时间:2012-11-27 12:19:47

标签: sql-server sql-server-2012 odbc c++-cli

SQLGetDiagRec返回本机错误代码。是否有任何概述SQL Server 2012的错误代码?我在MSDN上找不到任何东西。

5 个答案:

答案 0 :(得分:33)

use master
select * from sysmessages

答案 1 :(得分:8)

我无法在互联网上找到各个代码的列表。但是我确实在MSDN上找到了严重性级别here的列表。它们如下:

严重级别/说明

  • 0-9:返回状态信息或报告的信息性消息 不严重的错误。数据库引擎不会引发系统 严重程度为0到9的错误。
  • 10:信息性消息 返回状态信息或报告不严重的错误。 出于兼容性原因,数据库引擎会转换严重性10 在将错误信息返回给调用之前,将严重性设置为0 应用
  • 11-16:表示可以通过修正的错误 用户。
  • 11:表示给定的对象或实体不存在。
  • 12:因使用而未使用锁定的查询的特殊严重性 特殊查询提示。在某些情况下,执行读取操作 这些语句可能导致数据不一致,因为锁是 不是为了保证一致性。
  • 13:表示交易 死锁错误。
  • 14:表示与安全相关的错误,例如 许可被拒绝。
  • 15:表示Transact-SQL中的语法错误 命令。
  • 16:表示可以更正的一般错误 用户。
  • 17-19:表示无法纠正的软件错误 用户。通知系统管理员此问题。
  • 17:表示 该语句导致SQL Server耗尽资源(例如 数据库的内存,锁或磁盘空间)或超过一些 限制由系统管理员设置。
  • 18:表示问题 数据库引擎软件,但语句完成执行,和 保持与数据库引擎实例的连接。 每次收到消息时都应通知系统管理员 严重程度为18级。
  • 19:表示不可配置 已超出数据库引擎限制和当前批处理 已被终止。严重性级别为19或的错误消息 更高的停止执行当前批次。严重等级19 错误很少见,必须由系统管理员或 您的主要支持提供商。何时联系您的系统管理员 引发严重级别为19的消息。带有错误消息 严重级别从19到25将写入错误日志。
  • 20-24:表示系统问题并且是致命错误,这意味着 正在执行语句或批处理的数据库引擎任务 不再运行了。任务记录有关内容的信息 发生然后终止。在大多数情况下,应用程序 与数据库引擎实例的连接也可能会终止。 如果发生这种情况,根据问题,应用程序可能不会 能够重新连接。此范围内的错误消息可能会影响所有 访问同一数据库中的数据的进程可以指示 数据库或对象已损坏。严重性错误消息 从19到24的级别将写入错误日志。
  • 20:表示 声明遇到问题。因为问题有 只影响当前任务,不太可能是数据库 本身已经损坏。
  • 21:表示问题已存在 遇到会影响当前数据库中的所有任务,但确实如此 不太可能数据库本身已经损坏。
  • 22:表示 消息中指定的表或索引已被损坏 软件或硬件问题。发生严重级别22错误 很少。如果出现一个,运行DBCC CHECKDB以确定是否其他 数据库中的对象也被破坏了。问题可能在于 缓冲区缓存,而不是磁盘本身。如果是这样,重新启动 数据库引擎的实例可以解决问题。接着说 工作时,必须重新连接到数据库引擎的实例; 否则,使用DBCC来修复问题。在某些情况下,你可以 必须恢复数据库。如果重新启动实例 数据库引擎无法解决问题,然后问题就出现了 磁盘。有时会破坏错误中指定的对象 消息可以解决问题。例如,如果消息报告 数据库引擎的实例找到了一行 非聚簇索引中的长度为0,删除索引并重建它。
  • 23:表示整个数据库的完整性 问题是因为硬件或软件问题。严重等级23 错误很少发生。如果出现这种情况,请运行DBCC CHECKDB以确定 损害程度。问题可能只在缓存中,而不是 在磁盘本身。如果是这样,请重新启动数据库实例 引擎纠正了这个问题。要继续工作,您必须重新连接 到数据库引擎的实例;否则,使用DBCC进行修复 问题。在某些情况下,您可能必须还原数据库。
  • 24:表示媒体故障。系统管理员可能不得不这样做 恢复数据库。您可能还需要致电您的硬件供应商。

答案 2 :(得分:5)

我找到了MS SQL Server 2008 R2的代码,但大多数代码都适用于更高版本: http://technet.microsoft.com/en-us/library/cc645603(v=sql.105).aspx

答案 3 :(得分:3)

我自己也在寻找一个列表,发现你可以通过运行这个语句从主DB中查看它们:

SELECT * FROM sysmessages

答案 4 :(得分:0)

在SQL Server 2005及更高版本中,您可以使用:

SELECT * FROM sys.messages

正如其他人所提到的,您也可以使用(在SQL Server 2000中可用):

SELECT * FROM sysmessages