Eu tenho um erro estranho que ocorre na caixa SQL Server 2005 de um cliente. Fornecemos a eles uma visualização de dados que é preenchida com uma consulta com um CTE com várias junções/subconsultas que faz alguma interpretação de valor de texto em um campo NTEXT que contém uma sinopse XML
Eu sei que poderíamos ter usado outros tipos de campo e/ou métodos, mas é por um bom motivo que espero não ter que explicar aqui.
O problema é que, por algum motivo, essa consulta cria uma exceção fatal no SQL Server.
Apresentamos aqui uma versão condensada da parte comercial do T-SQL real que causa o erro
declare @@dtDateStart datetime, @@dtDateEnd datetime
set @@dtDateStart = getdate()
Set @@dtDateEnd = dateadd(year, 1, @@dtDateStart)
;with qItems
(date_created, SYSTEM_ID, LegalEntity) as
( select i.date_created,
i.externalKey as SYSTEM_ID,
case when i.HasLegalEntity > 0 then
substring(i.message, charindex('<LegalEntity>',i.message)+13, charindex('</LegalEntity>',i.message)-charindex('<LegalEntity>',i.message)-13)
else '' end as LegalEntity
from (select *, charindex('<LegalEntity>', message) as HasLegalEntity from dbo.INT_Error_Queue) as i
where i.date_created between @@dtDateStart and @@dtDateEnd)
select
QItems.date_created,
QItems.SYSTEM_ID,
Qitems.LegalEntity
from QItems
WHERE
(isnull(Qitems.LegalEntity, '') not in (select key_value from Special_app_Settings where key_name = 'EntityName'))
A princípio suspeitei que tivesse algo a ver com a cláusula where, porque [key_value]
on [Special_app_Settings]
é do tipo nvarchar(4000)
, e [i].[message]
on [INT_Error_Queue]
é do tipo [ntext]
, mas não tenho certeza se isso causaria o erro que tenho. Se eu remover a cláusula where, o erro não ocorre.
Aqui está o despejo do log do SQL Server:
03/13/2013 10:30:24,Server,Unknown,A user request from the session with SPID 101 generated a fatal exception. SQL Server is terminating this session. Contact Product Support Services with the dump produced in the log directory.
03/13/2013 10:30:24,Server,Unknown,Error: 17310<c/> Severity: 20<c/> State: 1.
03/13/2013 10:30:24,spid101,Unknown,External dump process return code 0x20000001.<nl/>External dump process returned no errors.
...
03/13/2013 10:30:20,spid101,Unknown,* BEGIN STACK DUMP:
03/13/2013 10:30:20,spid101,Unknown,*
03/13/2013 10:30:20,spid101,Unknown,* *******************************************************************************
03/13/2013 10:30:20,spid101,Unknown,SqlDumpExceptionHandler: Process 101 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server is terminating this process.
03/13/2013 10:30:20,spid101,Unknown,***Stack Dump being sent to C:\Program Files\Microsoft SQL Server\MSSQL.2\MSSQL\LOG\SQLDump0039.txt
03/13/2013 10:30:20,spid101,Unknown,Using 'dbghelp.dll' version '4.0.5'
Alguém tem alguma ideia de POR QUE isso ocorre?