- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- [SQL] Stored procedure chiamata da ASP
-
[SQL] Stored procedure chiamata da ASP
Buongiorno ragazzi,
ho un problema non indifferente con Sql Server, ovvero richiamando da una pagina ASP una stored procedure non esegue correttamente la procedura, pare che ne esegua solo un pezzo, mentre se prendo l'Sql inserito nella stored procedura e lo eseguo nel Query Analyzer va tutto perfettamente.
Secondo voi cosa potrebbe essere, ci sto sbattendo la testa da 2 giorni... bo!!
Confido in Voi, attendo Vostre pronte notizie in merito.grazie anticipatamente
ciao
-
Qualche parametro passato in modo errato?
Senza vedere il codice direi che può indovinare solo un mago
-
Non vengono passati parametri alla stored procedure, nella pagina ASP chiamao semplicemente la procedura senza alcun parametro.
Se ti potrebbe essere di aiuto ti posso inviare il codice SQL... dimmi tu!!fammi sapere
grazie
ciao
-
Postalo qui l'sql...
Ora che ci penso potrebbe essere il timeout della pagina. Richiede un lungo tempo di esecuzione?
Sembra l'unica ipotesi...
-
Forse hai ragione per il timeout...
CREATE PROCEDURE Sp_IMPORT_RM5_Operatore_No_Su_Giro --Questa procedura viene utlizzata per importare i fattorini che non sono stati assegnati ad alcun viaggio --per qualsiasi tipo di motivazione (Ferie, Permesso, Malattia e Training). --Viene richiamata da una pagina ASP che a sua volta viene chiamata tramite un .BAT che viene a sua volta --richiamato da un pulsantino in Access AS BEGIN set nocount on --cancello contenuto della tabella TB_GIRO_RDS a seconda della data che mi stata passata DECLARE @DataRDS datetime DECLARE CursorInsertTable1 CURSOR FOR SELECT DISTINCT DataViaggio FROM RM5.dbo.ViaggiEsportatiFleming GROUP BY DataViaggio OPEN CursorInsertTable1 FETCH NEXT FROM CursorInsertTable1 INTO @DataRDS WHILE @@FETCH_STATUS = 0 begin DELETE FROM TB_GIRO_RDS WHERE DATA = @DataRDS FETCH NEXT FROM CursorInsertTable1 INTO @DataRDS end close CursorInsertTable1 deallocate CursorInsertTable1 --inserimento nella tabella TB_GIRO_RDS DECLARE @UtenteId varchar(10), @Data datetime, @NewId int, -- Nuovo ID @Tabella varchar(50) SET @Tabella = 'TB_UTENTE_NO_SU_GIRO' DECLARE CursorInsertTable CURSOR FOR SELECT DISTINCT DB_COLLABORATORI.dbo.AD_UTENTI.ID, RM5.dbo.Problemi.Data FROM DB_COLLABORATORI.dbo.AD_UTENTI, RM5.dbo.Problemi WHERE EXISTS (SELECT RM5.dbo.ViaggiEsportatiFleming.CodProblema FROM RM5.dbo.ViaggiEsportatiFleming WHERE RM5.dbo.ViaggiEsportatiFleming.CodProblema = RM5.dbo.Problemi.Codice) AND (DB_COLLABORATORI.dbo.AD_UTENTI.AREA_ID = 'S00000000J') AND (DB_COLLABORATORI.dbo.AD_UTENTI.STATO = '1') AND (DB_COLLABORATORI.dbo.AD_UTENTI.ID+Convert(char(10),RM5.dbo.Problemi.Data)) NOT IN ( SELECT DISTINCT (RM5.dbo.ViaggiEsportatiFleming.CodAutista+Convert(char(10),RM5.dbo.ViaggiEsportatiFleming.DataViaggio)) FROM RM5.dbo.ViaggiEsportatiFleming GROUP BY RM5.dbo.ViaggiEsportatiFleming.CodAutista, RM5.dbo.ViaggiEsportatiFleming.DataViaggio ) OPEN CursorInsertTable FETCH NEXT FROM CursorInsertTable INTO @UtenteId, @Data WHILE @@FETCH_STATUS = 0 begin EXEC MAKE_UNIQUE_KEY_INT @Tabella, @NewId OUTPUT -- Creo la nuova chiave primaria INSERT INTO TB_UTENTE_NO_SU_GIRO ( ID, UTENTE_ID, DATA ) VALUES ( @NewId, @UtenteId, @Data ) FETCH NEXT FROM CursorInsertTable INTO @UtenteId, @Data end close CursorInsertTable deallocate CursorInsertTable END
confido in te
grazie
ciao
-
Sicuramente va in timeout da codice...
La procedura non è proprio semplicissima come esecuzione, fa anche uso di cursori e se i record sono centinaia di migliaia di sicuro non è veloce. Guarda il tempo che ci mette da query analyzer. Li la esegue perchè non esiste timeout. Può impiegarci anche 5 giorni.
Le cose sono 2. O provi ad ottimizzarla (usa gli indici sui campi where) o la esegui solo da analyzer.
Se il tempo di esecuzione non è esagerato puoi alzarlo un po via codice.server.scriptTimeout=n_secondi (in asp classic)
Page.Server.ScriptTimeout = 60 (in vb.net)
-
Non è il timeout ci mette 4 secondi ad eseguire entrambe le procedure...
Il server però ha molte richieste al giorno, tieni conto che ci sono 150 utenti che lo usano costantemente e fanno decine di richieste al minuto, infatti pare proprio che quando le richieste aumentano vengono inseriti meno record nella tabella e viceversa quando le richieste diminuiscono vengono inseriti + record nella mia tabella.
Che posso fare!?!?!?
Come posso dire alla stored procedure "ESEGUI IL MIO CODICE FINO IN FONDO PRIMA DI USCIRE..." !?!?!?fammi sapere
grazie
ciao
-
Forse è una questione di permessi
Sul query analyzer ti logghi come sa? Prova a loggarti con lo stesso utente col quale ti connetti al database e vedi se ti esegue tutta la procedura
-
Uso lo stesso utente da ambo le parti...
Sembra quasi che mi serva un ROLLBACK o qualche cosa del genere... che ne dite!?!?grazie
ciao
-
-
A sto punto non saprei. E' un po difficile capire senza metterci le mani sopra.
i sintomi sono quelli del timeout ma se mi dici che la stored è veloce non saprei.
Magari è il webserver che è troppo lento a causa delle troppe connessioni
-
Pensate ho provato il ROLLBACK e non inserisce nulla nella tabella
Di seguito il codice che ho inserito come rollback--al'inizio della procedura ho messo BEGIN TRAN --mentre alla fine della procedura ho messo IF (@@ERROR<>0) GOTO on_error COMMIT TRAN RETURN (1) on_error: ROLLBACK TRAN RETURN (-1)
che dite dovrebbe essere giusto!?
non so + che fare... qualche suggerimento!?!?!?!?!?!?!?!?grazie
ciao
-
Io sono convinto che non è un problema di database ma dipende sicuro da qualcosa che sta a monte...
Se la stored funziona nell'analizyer allora il db non c'entra sicuro.
-
Cosa mi consigli di guardare!?
fammi saperegrazie
ciao
-
Crea una tabella di prova con 1 campo testo.
Crea una nuova stored che accetti un parametro nvarchar in ingresso e che inserisca il valore nella nuova tabella creata.
Chiama la stored passandogli il parametro e vedi se inserisce il valore.
Comincia ad escludere almeno se c'è un problema di comunicazione con il database o se è quella stored a non rispondere.
-
@FuSioNmAn said:
Crea una tabella di prova con 1 campo testo.
Crea una nuova stored che accetti un parametro nvarchar in ingresso e che inserisca il valore nella nuova tabella creata.
Chiama la stored passandogli il parametro e vedi se inserisce il valore.
Comincia ad escludere almeno se c'è un problema di comunicazione con il database o se è quella stored a non rispondere.Questo lo fa... anche perchè comunque ci sono centinaia di richieste al giorno... sembra che sia solo quando deve inserire un certo numero di dati in 2 tabelle diverse tramite un ciclo sql...
Comunque abbiamo escluso che sia problema di comunicabilità, cos'altro posso fare!?
confido in te, grazie
ciao
-
Incolla il codice asp della pagina che chiama la stored.
Tutto il codice asp, non solo dove chiama la stored.
-
@FuSioNmAn said:
Incolla il codice asp della pagina che chiama la stored.
Tutto il codice asp, non solo dove chiama la stored.Ecco il codice ASP che mi hai chiesto
<%@ Language=VBScript %> <% Response.buffer = true %> <html> <!-- #INCLUDE FILE="Constants.asp" --> <head> <link rel="STYLESHEET" type="text/css" href="StyleSheets/styleStampa.css"> <meta NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <meta HTTP-EQUIV="Cache-Control" CONTENT="no_cache"> <meta HTTP-EQUIV="Pragma" CONTENT="no_cache"> <meta HTTP-EQUIV="Expires" CONTENT="0"> <script language="javascript" src="js/Utility.js"></script> </head> <body> <% dim conn dim rsImportViaggi dim rsImportOperatoriNoSuGiro Response.expires=0 Response.CacheControl="private" Server.ScriptTimeout = 2000 set conn = server.CreateObject("ADODB.Connection") conn.Open Session("Connessione") set rsImportViaggi = server.CreateObject ("ADODB.recordset") set rsImportViaggi = conn.Execute ("Sp_IMPORT_RM5_Viaggi_Rds") %> <br><br><br><br> <center> IMPORT VIAGGI R.D.S. NEL PORTALE<br>AVVENUTO CON SUCCESSO... </center> <% set rsImportOperatoriNoSuGiro = server.CreateObject ("ADODB.recordset") set rsImportOperatoriNoSuGiro = conn.Execute ("Sp_IMPORT_RM5_Operatore_No_Su_Giro") %> <br><br><br><br> <center> IMPORT OPERATORI NO SU GIRO NEL PORTALE<br>AVVENUTO CON SUCCESSO... </center> <% 'Chiude rs e conn rsImportViaggi.close set rsImportViaggi = nothing rsImportOperatoriNoSuGiro.close set rsImportOperatoriNoSuGiro = nothing conn.Close set conn = nothing %> </body> </html>
ciao, ciao
-
Avanti ragazzi, ma proprio + nessuno mi sa aiutare...!?
dai forza e coraggio a me è rimasto il problema inrisolto... non vorrete lasciare un povero ragazzo in alto mare!!AIUTO!!
grazie
ciao