应用对象
SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

症状

假设你有一个表,其中包含 Microsoft SQL Server 2008 R2、SQL Server 2012 或 SQL Server 2014 中的 DML 触发器,并且在该触发器中,你可以使用其他表联接插入/删除的表。 在此表上执行 DML 语句时,可能会在触发器编译期间出现访问冲突,并且你会收到以下错误:

当前命令出现严重错误。 应丢弃结果(如果有)。

此外,在 SQL Server 错误日志中记录以下错误:

<日期><时间> spid # * * * 堆栈转储被发送到 <FilePath>\SQLDumpxxx.txt<日期 ><>spid # SqlDumpExceptionHandler: Process # 生成的严重异常 c0000005 EXCEPTION_ACCESS_VIOLATION。 SQL Server 正在终止此进程。<日期><时间> spid # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *><<>><<><2 日期><时间><5 spid # * ><6 日期><时间><9 spid #><0 日期><时间><3 Spid # *><4 日期><时间><7 SPID # *><8 日期><时间>Spid # * 异常地址 = 00000000009E4F2A 模块(sqlservr + 00000000002D4F2A)<日期><时间> spid # * 异常代码 = C0000005 EXCEPTION_ACCESS_VIOLATION<日期><时间>spid # * 写入地址0000000000000000时发生访问冲突<><日期>spid # * 输入缓冲区510字节-<日期><时间> spid # * SQL_query_code

SQL Server 的每个新的累积更新均包含以前的累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

解决方法

若要解决此问题,请不要直接在查询中直接使用已插入/已删除的表将其与其他表联接,而是将其缓存在 temp 表中并在查询中使用 temp 表。

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。