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