Mancata segnalazione di errore

di il
1 risposte

Mancata segnalazione di errore

Ciao a tutti ,

ho perso un paio di ore per un banale errore di distrazione commesso su una query
del tipo riportato in fondo e che non mi ha restituito
alcun errore nonostante la seguente porzione di query

and IdCausale in (select IdCausale from dbo.t2 where UM='G')

sia manifestamente errata perchè il campo IdCausale non appartiene alla tabella dbo.t2


Premesso che non sono interessato a sapere come farla con altri metodi,
mi chiedevo se esiste una qualche opzione per far sollevare un'eccezione al db
oppure sapere se è un bug del dbms a me non noto.

Sul mio pc e con il mio SqlServer ver 2014 mi restituisce i record con IdCausale 1 e 3

use tempdb
go

if OBJECT_ID('dbo.t1') is not null 
drop table dbo.t1 
GO

if OBJECT_ID('dbo.t2') is not null 
drop table dbo.t2 
GO
 
create table dbo.t1 (IdCausale int primary key , DesCausale varchar(200))
insert into dbo.t1 (IdCausale  , DesCausale) values(1, 'Causale1' )
insert into dbo.t1 (IdCausale  , DesCausale) values(2, 'Causale2' )
insert into dbo.t1 (IdCausale  , DesCausale) values(3, 'Causale3' )

create table dbo.t2 (CodCausale int primary key , UM char(1))
insert into dbo.t2 (CodCausale  , UM) values(1, 'G' )
insert into dbo.t2 (CodCausale  , UM) values(2, 'G' )
insert into dbo.t2 (CodCausale  , UM) values(3, 'O' )

select *
from dbo.t1
where IdCausale in (1,3)
--  istruzione errata
and IdCausale in (select IdCausale from dbo.t2 where UM='G')

drop table dbo.t1
drop table dbo.t2 

1 Risposte

  • Re: Mancata segnalazione di errore

    Scrivendo la domanda ho capito ;
    non da alcun errore perchè nella presunta parte errata
    
    ....
    in (select IdCausale from dbo.t2  where UM='G')
    ...
    
    il motore di elaborazione ritiene che IdCausale faccia riferimento al campo di dbo.t1
    ... ed in effetti non c'è nulla che possa fargli pensare il contrario.

    Infatti scrivendo come segue va giustamente in errore
    
    ....
    in (select x.IdCausale from dbo.t2 x where x.UM='G')
    ...
    
    Con la speranza di rispiarmiare qualche mal di testa a chi legge
Devi accedere o registrarti per scrivere nel forum
1 risposte