Avatar billede paultodobom Nybegynder
29. september 2003 - 11:53 Der er 5 kommentarer og
1 løsning

T-SQL opdatering af poster i cursor

Jeg har laver flg. T-SQL kode som skal hente indholdet i en tabel og tilrette indholdet i feltet Afdelingsnr så kun de tre sidste cifre bevares og resten smides væk:

DECLARE @pk_id        AS INT
DECLARE @afd        AS NVARCHAR(7)


DECLARE afdelinger_cursor CURSOR LOCAL DYNAMIC SCROLL_LOCKS
FOR
    SELECT PK_InstitutionID, Afdelingsnr
    FROM tblInstitution_test
FOR UPDATE OF Afdelingsnr


OPEN afdelinger_cursor

-- Hent den første post i postsættet
FETCH NEXT FROM afdelinger_cursor INTO @pk_id, @afd

-- Gennemløb postsættet indtil slutningen af det
WHILE @@FETCH_STATUS = 0
BEGIN
    -- Hvis afd = * skal der springes videre til den næste post
    IF @afd = '*'
    BEGIN
        FETCH NEXT FROM afdelinger_cursor
        CONTINUE
    END
    --UPDATE tblInstitution_test SET Afdelingsnr = Right(@afd, 3) WHERE PK_InstitutionID = @pk_id
    UPDATE tblInstitution_test SET Afdelingsnr = 'test' WHERE PK_InstitutionID = 2
    -- Hent næste post i postsættet
    FETCH NEXT FROM afdelinger_cursor
END

CLOSE afdelinger_cursor
DEALLOCATE afdelinger_cursor
GO


P.t. består et afdelingsnr af enten syv cifre eller en asteriks (*), men de skal fremover kun være tre cifre. Datatypen er for Afdelingsnr er NVARCHAR(7).
Jeg kan ikke få sql'en til at opdatere tabellen. Hvad gør jeg forkert?
Avatar billede bjornicle Nybegynder
29. september 2003 - 12:00 #1
Prov:

DECLARE @pk_id        AS INT
DECLARE @afd        AS NVARCHAR(7)


DECLARE afdelinger_cursor CURSOR LOCAL DYNAMIC SCROLL_LOCKS
FOR
    SELECT PK_InstitutionID, Afdelingsnr
    FROM tblInstitution_test
FOR UPDATE OF Afdelingsnr


OPEN afdelinger_cursor

-- Hent den første post i postsættet
FETCH NEXT FROM afdelinger_cursor INTO @pk_id, @afd

-- Gennemløb postsættet indtil slutningen af det
WHILE @@FETCH_STATUS = 0
BEGIN
    -- Hvis afd = * skal der springes videre til den næste post
    IF @afd = '*'
    BEGIN
        FETCH NEXT FROM afdelinger_cursor INTO @pk_id, @afd
        CONTINUE
    END
    --UPDATE tblInstitution_test SET Afdelingsnr = Right(@afd, 3) WHERE PK_InstitutionID = @pk_id
    UPDATE tblInstitution_test SET Afdelingsnr = 'test' WHERE PK_InstitutionID = 2
    -- Hent næste post i postsættet
    FETCH NEXT FROM afdelinger_cursor INTO @pk_id, @afd
END

CLOSE afdelinger_cursor
DEALLOCATE afdelinger_cursor
GO
Avatar billede paultodobom Nybegynder
29. september 2003 - 12:26 #2
>>bjornicle: hvori ligger dit forslag?
Avatar billede bjornicle Nybegynder
29. september 2003 - 12:30 #3
At hver gang du kalder FETCH NEXT skal du specificere hvilke variabler du fetcher ind i
Avatar billede paultodobom Nybegynder
29. september 2003 - 12:34 #4
Den overså jeg. Nu virker det! Tak for hjælpen. Smid lige et svar så du kan få dine point. Mvh Paul
Avatar billede bjornicle Nybegynder
29. september 2003 - 12:36 #5
Det var saa lidt :)
Avatar billede paultodobom Nybegynder
29. september 2003 - 12:38 #6
Værsgo :-)
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