74 messaggi dal 23 maggio 2005
Ciao a tutti!
Ho necessità di utilizzare in una stored procedure il simbolo '-'
(è un semplice 'meno' matematico  )
Utilizzo SqlServer e VisualStudio.
Se eseguo la stored in SqlServer non mi dà errori ma quando
eseguo il mio programma con VisualStudio mi dà come errore:
"Incorrect syntax near '-'"
Perchè?
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
...stai utilizzando un carattere riservato. Devi racchiudere il nome dell'oggetto tra parentesi quadre ma meglio ancora sarebbe evitare questi caratteri...

Bye
74 messaggi dal 23 maggio 2005
Grazie per il suggerimento!
Purtroppo però il problema non si risolve.
La riga in cui utilizzo il carattere '-' è la seguente:

SET @righe =@pageSize*(@currentIndex-1)

e se inserisco le parentesi quadre quando salvo la stored
nel database mi viene dato errore "nome di campo non valido".
Mi sembra strano che in una stored procedure non si possa usare
il carattere '-'.Come si fa in certi casi a gestire le operazioni
aritmetiche? La mia è solo meraviglia da principiante?

Ciao
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Daniela62 ha scritto:

SET @righe =@pageSize*(@currentIndex-1)


...qui non si tratta di inserire le parentesi quadre. Il suggerimento era per eseguire delle stored procedure del tipo

EXEC [My-Proc]

L'istruzione di cui sopra è del tutto lecita. Come sono definite le variabili? Il seguente script, come vedi, va a buon fine e restituisce il risultato atteso

===============================
DECLARE @righe INT,
@pageSize SMALLINT,
@currentIndex SMALLINT

SET @pageSize = 8096
SET @currentIndex = 3

SET @righe =@pageSize*(@currentIndex-1)

SELECT @righe
===============================

Bye
74 messaggi dal 23 maggio 2005
Ti posto tutta la procedura,è breve!

ALTER PROCEDURE Prova2
(
@pageSize SMALLINT,
@currentIndex SMALLINT
)

AS
DECLARE @righe int
DECLARE
@query nvarchar(4000)

SET @righe =@pageSize * (@currentIndex - 1)
SET @query = ' SELECT * FROM
(SELECT TOP ' + CONVERT(nvarchar, @pageSize*@currentIndex) + ' * FROM Prodotti ORDER BY IdProdotto) AS t1
WHERE IdProdotto NOT IN
(SELECT TOP ' + CONVERT(nvarchar, @righe) + ' IdProdotto FROM Prodotti ORDER BY IdProdotto)'

EXEC sp_executesql @query

Ciao
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Daniela62 ha scritto:
Ti posto tutta la procedura,è breve!


potrebbe essere ancora più breve modificando la query in

SET @query = ' SELECT TOP ' + CONVERT(nvarchar, @pageSize) + ' * FROM Prodotti
WHERE IdProdotto NOT IN
(SELECT TOP ' + CONVERT(nvarchar, @righe) + ' IdProdotto FROM Prodotti ORDER BY au_fname) ORDER BY IdProdotto'

e tuttavia anche la tua è sintatticamente corretta. Non è che stai provando la stored procedure con il parametro @currentindex = 0 che inevitabilmente produce un valore negativo di @righe...?

Bye
74 messaggi dal 23 maggio 2005
Sì,in effetti era così :il parametro @currentIndex aveva valore 0;
ho apportato varie modifiche alla stored procedure ed ora non
si presenta più quell'errore. Però c'è ancora qualcosa che non va
che,secondo me, non dipende dalla stored procedure.
Utilizzo la procedura per caricare un controllo DataGrid.
La pagina 1 dei risultati mi viene visualizzata correttamente,ma
le pagine successive sono sfasate, nel senso che cliccando sul 3
mi vengono visualizzati i record della pagina 2,cliccando su 4 quelli
della pagina 3 e così via...Mi sapresti dire perchè?
Ciao e grazie 1000 per la dritta!
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
...assodato che la stored procedure è corretta (anche per quanto riguarda il "numero" delle pagine) è evidente che sbagli qualcosa quando vai a "numerare" le pagine sul datagrid...

Bye
Modificato da l.bianchi il 06 dicembre 2005 12.36 -

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.