Gestione errori in un codice sql

mercoledì 02 luglio 2008 - 15.44

trinity Profilo | Guru

Salve ragazzi,
ho scritto una stored all'interno della quale viene eseguita una Inser sql...

Nella tabella del mio db ho settato bene i campi della chiave primaria, eppure ad un certo punto mi esce il seguente errore quando elaboro:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

posso vedere quale record id dati si sta tentando di scrivere nel db e che risulta duplicato?

Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Salve ragazzi,
Ciao!

>posso vedere quale record id dati si sta tentando di scrivere
>nel db e che risulta duplicato?
se hai SQL Server 2005, puoi usare la TRY CATCH, in modo da trappare l'errore e farti tornare quello che stavi scrivendo:

TRY.. CATCH (transact-sql)
http://technet.microsoft.com/en-us/library/ms175976.aspx

>Ciao e grazie
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

trinity Profilo | Guru

ci riesco ma posso ricarvarvi solo:

ERROR_LINE() as ErrorLine,
ERROR_PROCEDURE() as ErrorProcedure,
ERROR_NUMBER() as ErrorNumber,
ERROR_MESSAGE() as ErrorMessage;

io volevo vedere proprio il contenuto dei dati che stavo scrivendo e che sono duplicati...si può fare?

grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>io volevo vedere proprio il contenuto dei dati che stavo scrivendo
>e che sono duplicati...si può fare?
Eccoti l'esempio. Cerco di inserire un ID ce è il parametro della stored procedure. Se va male l'inserimento torno l'id che ha generato l'errore:

USE tempdb; GO IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'dbo.ChiaviDoppie')) DROP TABLE dbo.ChiaviDoppie GO CREATE TABLE dbo.ChiaviDoppie ( ID int PRIMARY KEY CLUSTERED ) GO INSERT INTO dbo.ChiaviDoppie VALUES (5) GO IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'dbo.InsertChiaviDoppie')) DROP PROCEDURE dbo.InsertChiaviDoppie GO CREATE PROCEDURE dbo.InsertChiaviDoppie @ID int AS BEGIN SET NOCOUNT ON; BEGIN TRY INSERT INTO dbo.ChiaviDoppie VALUES (@ID) END TRY BEGIN CATCH SELECT IDNonValido = @ID END CATCH END GO -- chiamata che genera errore EXEC dbo.InsertChiaviDoppie 5 GO

>
>grazie
di nulla!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

trinity Profilo | Guru

Solo che io utilizzo una insert del genere:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Solo che io utilizzo una insert del genere:
>
>Insert Into archivio_mov Select codalbergo,codcomalb,max(nschedina),annogestionale,dbo.GetFirstMonthDay_1(@data_elaborazione),'A',nrcomp,statores,codnazione,comune,provincia,codcomune,codgruppo,'1'
>from #tbltemp
>where data_partenza is null
Ma non puoi controllare che il record con quella chiave non esista durante la creazione della #tbltemp?

--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

trinity Profilo | Guru

e come dovrei fare?
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5