Avatar billede roadrunr Nybegynder
13. februar 2003 - 15:51 Der er 6 kommentarer

Dynamisk SQL i LOOP

Hvordan kan jeg benytte dynamisk SQL i et loop, f.eks.:
---------
DECLARE @SQLdynamic varchar(4000)
SELECT @SQLdynamic = 'SELECT * FROM tblItems'

DECLARE Items CURSOR LOCAL FOR @SQLdynamic    OPEN Items
    FETCH NEXT FROM Items INTO @ItemID
    WHILE @@FETCH_STATUS = 0
    BEGIN
   
            .... div. sql....
       
    FETCH NEXT FROM Items INTO @ItemID
    END
    CLOSE Items
    DEALLOCATE Items
---------
Avatar billede janus_007 Nybegynder
13. februar 2003 - 19:52 #1
Når du skal benytte dig af dynamic sql statements er det vigtigt at du laver al koden dynamic. Og det er pga. det variabelscope der findes i dynamic ctr. normal sql!

Så rent teknisk smider du bare også din declaration og cursor ind i @SQLDynamic, ala:

SET @SQLDynamic = 'SELECT * FROM tblItems'
SET @SQLDynamic = @SQLDynamic + 'DECLARE Items CURSOR LOCAL '
SET @SQLDynamic = @SQLDynamic + 'FOR @SQLdynamic '
SET @SQLDynamic = @SQLDynamic + 'OPEN Items '
osv. med resten af koden !!

Jeg kan desværre ikke sætte den ind i en større forbindelse, da du ikke har fortalt hvori det variable ligger :O)
Avatar billede roadrunr Nybegynder
14. februar 2003 - 08:58 #2
Okay.. det lyder meget rigtig. Med hvad skal jeg gøre, hvis jeg inde i min dynamiske SQL ønsker at kalde en stored procedure?

Fordi jeg skal vel bruge "Exec()" til at kalde min SP. Det vil så skabe en "nested" exec()

Kan det lade så gøre? Kan du evt. komme med et kort eksempel?
Avatar billede janus_007 Nybegynder
14. februar 2003 - 09:24 #3
Jamen det er egentlig bare at skrive den som nested.

SET @SQLDynamic = 'SELECT * FROM tblItems'
SET @SQLDynamic = @SQLDynamic + 'DECLARE Items CURSOR LOCAL '
SET @SQLDynamic = @SQLDynamic + 'FOR @SQLdynamic '
...
SET @SQLDynamic = @SQLDynamic + 'EXEC(sp) '
eller
SET @SQLDynamic = @SQLDynamic + 'sp '
...
SET @SQLDynamic = @SQLDynamic + 'CLOSE Items '
SET @SQLDynamic = @SQLDynamic + 'DEALLOCATE Items '

EXEC(@SQLDynamic)

Der er ingen speciel grund til at kalde en sp med EXEC som prefix!

Håber du kan bruge det :O)
Avatar billede janus_007 Nybegynder
14. februar 2003 - 09:25 #4
btw. jeg kommer lige i tanke om at når jeg laver lidt komplekse dynamiske sql, så istedet for at kalde EXEC til sidst, kalder jeg PRINT, det er en god måde at lave lidt simpel debugging på.
Avatar billede roadrunr Nybegynder
14. februar 2003 - 09:38 #5
det lyder meget "handy". Nu kom jeg godt nok til at give eksemplet med, at jeg ønskede en SP executed. Men det var nu alm SQL kode jeg skulle have hjælp med.

Jeg har nemlig haft lidt problemer med " ' "'erne, når jeg skulle lave dynamisk SQL inde i noget andet dynamisk SQL.
Avatar billede janus_007 Nybegynder
14. februar 2003 - 10:52 #6
okay!
Jeg vil stadig sige at du skal bruge print, for at se hvori dine fejl ligger. Ellers må du poste noget hvori der ligger en fejl med pinger, så hjælper jeg på den :O)
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