Avatar billede iakob Nybegynder
13. november 2001 - 09:41 Der er 2 kommentarer og
1 løsning

MS SQL Server 6.5 kode spørgsmål

Hej

Jeg har følgende konstruktion (simpliciferet):

Declare @var tinyint
Declare cursor .. convert(tinyint, colint)...
Open Cursor
Fetch next ... @var ...
While (@@Fetch_Status = 0)
Begin
    if <someting>
    begin
        <do something>
        fetch next ... @var ...
        CONTINUE
    end
    <do something else (ret lang kode)>
    fetch next ... @var ...
end
Close cursor
Deallocate cursor


Dette giver mig følgende fejl, hvis (og kun hvis) den kommer ind i \"if <something>\" koden:
Msg 16923, Level 16, State 1, Server <servernavn>, Line 68
Cursorfetch: Maximum length of \'<variable>\' is incompatible with that of selected column in the cursor

Hvis jeg i stedet har følgende konstruktion, så får jeg ikke fejlen. Heller ikke på de samme data:

Declare @var tinyint
Declare cursor .. convert(tinyint, colint)...
Open Cursor
Fetch next ... @var ...
While (@@Fetch_Status = 0)
Begin
    if <someting>
    begin
        <do something>
    end
    else
    begin
        <do something else (ret lang kode)>
    End
    fetch next ... @var ...
end
Close cursor
Deallocate cursor

Det siger sig selv at der ikke er forskel på de forskellige fetch-kommandoer (de er klippet og klistret).


Hvorfor opstår fejlen? Nogen bud?
Det skal lige siges at der er et stort antal data, som skal opdateres. Disse opdateringer tilhører egentligt den samme transaktion, men for ikke at løbe imod begrænsning i open objects, locks, tempdb mv, så er der indsat en tæller. For hver XXX antal gennemløb committes transaktionen og der startes en ny. Koden i \"if <something>\" bliver kaldt under 5 gange og den går galt første gang. Kan det have noget med denne transaktionsstyring at gøre?
Avatar billede bennytordrup Nybegynder
13. november 2001 - 09:43 #1
Jeg kan ikke give dig en forklaring, men rent kodemæssigt vil jeg foretrække den version, som ikke giver dig problemer. Den er opbygget på en måde, som ikke gør det nødvendigt at foretage spring i sekvensen.
Avatar billede torbenkoch Nybegynder
13. november 2001 - 16:53 #2
Det må siges, at være meget nemmere at give en forklaring, hvis man ser al koden...!
Avatar billede iakob Nybegynder
14. december 2001 - 07:51 #3
Jeg endte med den version som ikke gav problemet. Desværre havde jeg en deadline ;-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester