MS SQL Server 6.5 kode spørgsmål
HejJeg 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?
