Stored procedure

lunedì 20 aprile 2009 - 09.05

bolla111 Profilo | Senior Member

ciao...
sto usando sqlserver2008...ho creato una stored procedure che mi permette di cancellare i record di due tabelle associate alla tabella principale di cui voglio cancellare un record...cioè...mettiamo che io abbia un record sulla tabella principale che voglio cancellare...se esiste qlcs associato al record di questa tabella, per una questione di chiavi esterne, non mi viene permesso di cancellarlo se prima non elimino questi record associati...ecco perchè faccio la stored procedure...
ora il problema: per eliminare questo record uso 2 parametri...ma nessun record viene cancellato...mentre se provo ad usare un solo paramentro funziona...perchè?

ecco il codice:

USE [progetto]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[proc_Delete]

@VAL1 NVarChar = '100',
@VAL2 NVarChar = '4'
AS
BEGIN

SET NOCOUNT ON;

DELETE FROM TABELLA1 WHERE CHIAVE11=@VAL1 AND CHIAVE12=@VAL2

DELETE FROM TABELLA2 WHERE CHIAVE21=@VAL1 AND CHIAVE22=@VAL2

DELETE FROM TABELLAPRINC WHERE CHIAVEp1=@VAL1 AND CHIAVEp2=@VAL2

END

lbenaglia Profilo | Guru

>sto usando sqlserver2008...ho creato una stored procedure che
>mi permette di cancellare i record di due tabelle associate alla
>tabella principale di cui voglio cancellare un record...cioè...mettiamo
>che io abbia un record sulla tabella principale che voglio cancellare...se
>esiste qlcs associato al record di questa tabella, per una questione
>di chiavi esterne, non mi viene permesso di cancellarlo se prima
>non elimino questi record associati...ecco perchè faccio la stored
>procedure...
Volendo puoi abilitare le cascade delete per eliminare automaticamente le righe correlate quando elimini una o più righe dalla tabella master.

>ora il problema: per eliminare questo record uso 2 parametri...ma
>nessun record viene cancellato...mentre se provo ad usare un
>solo paramentro funziona...perchè?
Perché probabilmente non c'è alcuna riga che soddisfa il criterio di selezione
Posta un esempio completo che riproduca l'anomalia...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bolla111 Profilo | Senior Member

ma questo è un esempio...sono io che ho impostato i parametri con quei valori proprio perchè sono sicuro che esiste un recordche abbia quei valori li...e quando eseguo la stored non mi da alcun errore...mi dice che è stata eseguita, ma le righe interressate sono 0...

lbenaglia Profilo | Guru

>ma questo è un esempio...sono io che ho impostato i parametri
>con quei valori proprio perchè sono sicuro che esiste un recordche
>abbia quei valori li...e quando eseguo la stored non mi da alcun
>errore...mi dice che è stata eseguita, ma le righe interressate
>sono 0...
Appunto, si vede che non esiste alcuna riga che soddisfa quel criterio di selezione.
Ripeto, se vuoi ricevere un aiuto posta un esempio completo che riproduca l'anomalia.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bolla111 Profilo | Senior Member

non ho capito la tua richiesta...perchè più di questo non so cosa postarti...è il codice esatto...e di messaggi di errore non ne ho...cosa altro devo postare?

lbenaglia Profilo | Guru

>non ho capito la tua richiesta...perchè più di questo non so
>cosa postarti...è il codice esatto...e di messaggi di errore
>non ne ho...cosa altro devo postare?
Un esempio (CREATE TABLE, INSERT INTO, CREATE PROCEDURE).

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bolla111 Profilo | Senior Member

allora:

questo db è interfacciato a un programma in visual web developer...quindi il valore dei parametri vengono presi da li...
questa è la store procedure...

USE [progetto]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[proc_Delete]

@VAL1 NVarChar,
@VAL2 NVarChar
AS
BEGIN

SET NOCOUNT ON;

DELETE FROM TABELLA1 WHERE CHIAVE11=@VAL1 AND CHIAVE12=@VAL2

DELETE FROM TABELLA2 WHERE CHIAVE21=@VAL1 AND CHIAVE22=@VAL2

DELETE FROM TABELLAPRINC WHERE CHIAVEp1=@VAL1 AND CHIAVEp2=@VAL2

END

prima te l'avevo postato con i paramentri valorizzati perchè avevo provato ad eseguire la stored procedure direttamente da sql server, per capire se era un problema di programma o di stored procedure...ed è un problema di stored procedure...

adesso...se io tolgo per esempio il valore 2 e modifico la query in questo modo, funziona...

USE [progetto]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[proc_Delete]

@VAL1 NVarChar,
@VAL2 NVarChar
AS
BEGIN

SET NOCOUNT ON;

DELETE FROM TABELLA1 WHERE CHIAVE11=@VAL1

DELETE FROM TABELLA2 WHERE CHIAVE21=@VAL1

DELETE FROM TABELLAPRINC WHERE CHIAVEp1=@VAL1

END

questo è tutto quello che posso postarti...anche perchè il problema sta tutto qua...

lbenaglia Profilo | Guru

>questo è tutto quello che posso postarti...anche perchè il problema
>sta tutto qua...
Perché non posti i dati che ti ho chiesto?
Come facciamo a sapere se "il problema sta tutto qua..."?
Per me "non sta qua", ma posso provartelo solo se posti in esempio completo che secondo te non funziona.
Senza esempio non potremo aiutarti...

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bolla111 Profilo | Senior Member

ho messo un alleagto con tutte le istruzioni...

lbenaglia Profilo | Guru

>ho messo un alleagto con tutte le istruzioni...
OK... ti sei dimenticato di specificare il numero di caratteri dei due parametri.
I Books Online riportano: "When n is not specified in a data definition or variable declaration statement, the default length is 1." quindi il tuo @PRSOC valeva 1 e non 100.
Ti allego la procedura corretta:

-- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= CREATE PROCEDURE [dbo].[proc_GDEPR_Delete] -- Add the parameters for the stored procedure here @PRSOC NVarChar(100), @PRID NVarChar(15) AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Cancellazione tabelle figlio DELETE FROM dbo.GDEPRTI WHERE PRTIPRID=@PRID AND PRTISOC=@PRSOC; DELETE FROM dbo.GDEAS WHERE ASPRID=@PRID AND ASSOC=@PRSOC; -- Cancellazione tabella padre DELETE FROM dbo.GDEPR WHERE PRID=@PRID AND PRSOC=@PRSOC; END GO EXEC dbo.proc_GDEPR_Delete N'100', N'4';

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bolla111 Profilo | Senior Member

avevo già provato ad inserire le lunghezze ma non cambiava niente...forse perchè io mettevo il valore dei parametri quando li dichiaravo (@val nvarchar='100')...mentre con l'ultima riga che hai aggiunto funziona...grazie della pazienza....ciao
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5