40 messaggi dal 16 ottobre 2003
Ciao a tutti,
Non riesco a catturare l'errore di inserimento, il @@error si riferisce alla select ma a me serve sapere se è andata in errore l'insert. C'è un modo per intercettarlo?

Insert into pdbAree select * from Aree
if @@error <> 0
begin
print @@error
end

Grazie
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
antgio74 ha scritto:
Ciao a tutti,
Non riesco a catturare l'errore di inserimento, il @@error si riferisce alla select ma a me serve sapere se è andata in errore l'insert. C'è un modo per intercettarlo?

Insert into pdbAree select * from Aree
if @@error <> 0
begin
print @@error
end

Grazie


la variabile globale @@ERROR, al pari di @@ROWCOUNT, viene subito resettata dall'esecuzione dell'istruzione successiva, quindi tu non avrai mai risultati in questo modo..
devi "salvarti" il relativo valore ed utilizzarlo successivamente..

tipicamente si agisce come di seguito,
SET NOCOUNT ON
CREATE TABLE #t (
         Id int NOT NULL PRIMARY KEY ,
         Dato varchar(10) NOT NULL UNIQUE
         )
GO
DECLARE @e int, @r int
PRINT 'Va a buon fine'
INSERT INTO #t VALUES ( 1 , 'Andrea' )
SELECT @e = @@ERROR , @r = @@ROWCOUNT
SELECT @e AS [Error], @r AS [RowCount]
IF @e = 0 AND @r <> 0 
         PRINT 'Confermato'
ELSE
         PRINT 'Fallito'

PRINT '--'


PRINT 'Va a buon fine'
INSERT INTO #t VALUES ( 2 , 'Luca' )
SELECT @e = @@ERROR , @r = @@ROWCOUNT
SELECT @e AS [Error], @r AS [RowCount]
IF @e = 0 AND @r <> 0 
         PRINT 'Confermato'
ELSE
         PRINT 'Fallito'

PRINT '--'

PRINT 'Fallisce'
INSERT INTO #t VALUES ( 3 , NULL )
SELECT @e = @@ERROR , @r = @@ROWCOUNT
SELECT @e AS [Error], @r AS [RowCount]
IF @e = 0 AND @r <> 0 
         PRINT 'Confermato'
ELSE
         PRINT 'Fallito'

PRINT '--'

PRINT 'Fallisce'
INSERT INTO #t VALUES ( 1 , 'Pippo' )
SELECT @e = @@ERROR , @r = @@ROWCOUNT
SELECT @e AS [Error], @r AS [RowCount]
IF @e = 0 AND @r <> 0 
         PRINT 'Confermato'
ELSE
         PRINT 'Fallito'

PRINT '--'


PRINT 'Fallisce'
INSERT INTO #t VALUES ( 4 , 'Andrea' )
SELECT @e = @@ERROR , @r = @@ROWCOUNT
SELECT @e AS [Error], @r AS [RowCount]
IF @e = 0 AND @r <> 0 
         PRINT 'Confermato'
ELSE
         PRINT 'Fallito'

PRINT '--'


PRINT 'Viene eseguito ma il risultato deve essere negativo'
DELETE FROM #t WHERE Id = 1000
SELECT @e = @@ERROR , @r = @@ROWCOUNT
SELECT @e AS [Error], @r AS [RowCount]
IF @e = 0 AND @r <> 0 
         PRINT 'Confermato'
ELSE
         PRINT 'Fallito'

PRINT '--'


PRINT 'Viene eseguito correttamente'
DELETE FROM #t WHERE Id = 1
SELECT @e = @@ERROR , @r = @@ROWCOUNT
SELECT @e AS [Error], @r AS [RowCount]
IF @e = 0 AND @r <> 0 
         PRINT 'Confermato'
ELSE
         PRINT 'Fallito'

PRINT '--'

GO
DROP TABLE #t


saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.