06. april 2001 - 14:21Der er
11 kommentarer og 1 løsning
Stored Procedures med Cursor iblandet
Her er min kode:
CREATE PROCEDURE spOpretAxaptaBrugere AS BEGIN DECLARE crs_BrugerTilOprettelse CURSOR FOR SELECT brugerid, e.pers_id AS PersID, eu.afd AS Afd, e.AxaptaID as AxaptaID FROM vwElevQueueAxaptaTildeling vw INNER JOIN Elevstam e ON e.bid = vw.BrugerID INNER JOIN Elevudd eu ON e.pers_id = eu.pers_id FOR UPDATE
OPEN crs_BrugerTilOprettelse -- Her Kommer fejlen se fejl beskriv. efter kode! DECLARE @BrugerID varchar(12) DECLARE @Pers_ID int DECLARE @Afd Varchar(50) DECLARE @AxaptaID Nvarchar(4)
FETCH NEXT FROM crs_BrugerTilOprettelse INTO @BrugerID, @Pers_ID, @Afd, @AxaptaID
WHILE @@FETCH_STATUS = 0 BEGIN PRINT @Pers_ID FETCH NEXT FROM crs_BrugerTilOprettelse INTO @BrugerID, @Pers_ID, @Afd, @AxaptaID END CLOSE crs_BrugerTilOprettelse
=============== Server: Msg 170, Level 15, State 1, Procedure spOpretAxaptaBrugere, Line 26 Line 26: Incorrect syntax near \'crs_BrugerTilOprettelse\'. ===============
det der med curors i sql... en lidt skummel ting synes jeg.... brugte det engang og fik de mest underlige fejl... men dette fandt jeg ud af var fordi cursoren simpelt hen blev sluppet fri før jeg var færig med mine transaktioner! Du kan anvende HOLDLOCK til at undgå at cursoren slippes for tidlig! Men hvor i din kode du kan placere den er op til dig ;-)
hmm... tænker lige på en ting.... HOLDLOCK er nok mest optimal ved select, for når holdlock anvendes låses der for update, delete..
prøv lige at ændre dette ved din declare: BEGIN DECLARE CURSOR crs_BrugerTilOprettelse
SELECT brugerid, e.pers_id AS PersID, eu.afd AS Afd, e.AxaptaID as AxaptaID FROM vwElevQueueAxaptaTildeling vw INNER JOIN Elevstam e ON e.bid = vw.BrugerID INNER JOIN Elevudd eu ON e.pers_id = eu.pers_id FOR BROSWE
For brose specificerer så hut jeg visker at vi taler om updates!
SELECT brugerid, e.pers_id AS PersID, eu.afd AS Afd, e.AxaptaID as AxaptaID FROM vwElevQueueAxaptaTildeling vw INNER JOIN Elevstam e ON e.bid = vw.BrugerID INNER JOIN Elevudd eu ON e.pers_id = eu.pers_id FOR BROWSE
Desværre slash det duede sgu ikke......Jeg river mig snart i hovedet.
Men hvis der er en hjerne derude der har en anden algorithme for at løse mit problem.
Jeg har et view hvori der ligger en kø af brugere som skal oprettes. Mit problem ligger i at få fat i værdierne fra den første SELECT sætning, så jeg kan teste videre på dem.
WHILE @@FETCH_STATUS = 0 BEGIN PRINT @Pers_ID der skaber problemerne..Hmm hvordan får jeg så den skide løkke til at fortsætte indtil der ikke er flere i køen fra view?
Ehhh Slash =)))) Jeg fandt fejlen. Jeg mangler en slut END ved While Sætningen hehe. Og forresten skal fetch_status staves med lille.
Query Analyzer skriver at den er succesfull sætningen nu, men der kommer ingen data ud....Hmm et problem til en kedelig mandag morgen tror jeg.
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.