09. februar 2009 - 18:04Der er
6 kommentarer og 1 løsning
Subselect med variabler fejler i en SP og problemer med CURSOR
Jeg er igang med en SP som jeg ikke kan få til at fungere efter hensigten.
Jeg har skrevet en del SP til MySQL, men skal have lavet en til Ms SQL og der er nogle ting jeg får brug for hjælp til:
den vigtigste lige nu er :
i min SP: ALTER PROCEDURE [dbo].[usp_parseposts] @strPost_id INT AS DECLARE @tmpSerial nVARCHAR(128); DECLARE @tmpMeterID INT; DECLARE @tmpBoxID INT;
--- lidt kode -------
SET @tmpMeterID = (SELECT id FROM meters WHERE [box_id] = @tmpBoxID AND [serial] LIKE @tmpSerial)
--- lidt mere kode ----
Jeg har prøvet at uskrive hhv @tmpBoxID og @tmpSerial lige inden subselect'en og de er hvad de skal være (f.x. 1 og '00000001') men uanset hvad, returnerer den NULL i @tmpMeterID
HVIS jeg skriver selecten for sig selv (i en ny Query: SELECT id FROM meters WHERE box_id = 1 AND serial='00000001') så får jeg det rigtige resultat (1) men i SP'en kommer den altid tilbage med en "NULL"... hvad gør jeg galt ?
Det andet problem jeg har er med CURSOR
jeg har denne definieret:
DECLARE GETPOSTS CURSOR FOR SELECT contents FROM post_values WHERE post_id = @strPost_id ORDER BY number
Når jeg bruger @strPost definieret som en parameter så funker den fint, men hvis jeg DECLARE den istedet (og giver den en værdi selvf.) så kører den slet ikke cursoren (eller den er ihvertfald tom.. ) Og returnerer ingen fejl heller..
1. I din kode skrive du LIKE, men i dit eksempel som du laver særskildt bruger du ikke LIKE. Er det en fejl? Har du prøvet at lave din test select nøjagtigt som i din sp.
Du kan evt udelade linien med declare, således at din sp rent faktisk laver selve selecten, som du så kan se i din query analyser - eller andet værktøj som du benytter.
Det kunne også være et problem at du bruger nVARCHAR (sammen med en like) som datatype på @tmpSerial. Kan du ikke nøjes med VARCHAR?
Ja, DECLARE skal i starten. Godt du fandt problemet
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.