Avatar billede fthoms Nybegynder
07. marts 2001 - 16:52 Der er 5 kommentarer og
1 løsning

select @a = exec(\'<et eller andet dynamisk SQL>\')

Hej..

Det kan vel ikke passe, at det ikke er muligt på SQLServer 2000 at gemme en værdi returneret fra følgende sætning i en variabel.. eller hva\'?

exec(\'<et eller andet dynamisk SQL>\')

fx. kan følgende ikke lade sig gøre:

declare @a int
select @a=exec(\'select 10\')

/F
Avatar billede jennemaan Nybegynder
09. marts 2001 - 08:29 #1
Det kan du heller ikke under sql server 7.

Det du skriver er i realiteten:

Select @a=select 10

Syntaksen er dermed ikke korrekt.

Men du kan f.eks. skrive:

Declare @sSQL nvarchar(100)
SET @sSQL=\'Select * from bar\'

INSERT INTO FOO Exec(@sSQL)

/Jennemaan


Avatar billede raix Nybegynder
25. april 2001 - 15:27 #2
Hmm, så skal man lave det som transaktion... Ellers kan der være to der skriver til FOO, så bliver FOO lidt større end man regner med.
Avatar billede fthoms Nybegynder
10. maj 2001 - 08:00 #3
Det er ikke lykkedes at finde en løsning, så jeg lavede noget andet. Tak for hjælpen!
Avatar billede raix Nybegynder
10. maj 2001 - 08:46 #4
Du laver en statisk tom tabel (så man ikke bruger tid på at lave den)
Så starter du en transaktion.
nu indsætter du din select i din statiske tabel.
Nu kan du behandle dine dataer.
Lav rollback for transaktionen.
--Eks.
BEGIN TRAN FOO
  INSERT INTO staticTable
    Exec(\'Dynamisk SQL...\')
  SELECT * FROM staticTable
ROLLBACK TRAN FOO
Avatar billede fthoms Nybegynder
10. maj 2001 - 08:50 #5
Det var også en af de løsninger jeg har overvejet, men da det kører 1000-vis af gange, og er tidskritisk, er dette ikke en optimal løsning.
Jeg løste det ved at oprette lokale variable inden i EXEC(\'...\')-kommandoen og så behandle dem i det scope. Det bliver så nogle temmelig store EXEC-statements, men det virker.
Tak for hjælpen!
/fthoms
Avatar billede raix Nybegynder
10. maj 2001 - 08:52 #6
Man kan sikkert oxo gøre det sådan her:
DECLARE c1 CURSOR READ_ONLY FOR
  EXEC(\'SELECT a, b, c FROM foo\')
DECLARE @a varchar
DECLARE @b varchar
DECLARE @c varchar
OPEN c1
  FETCH NEXT FROM c1 INTO @a, @b, @c --Next :)
  WHILE @@FETCH_STATUS = 0
  BEGIN
    print \"a=\" + @a + \" b=\" + @b + \" c=\" + @c
    FETCH NEXT FROM c1 INTO @a, @b, @c --Next :)
  END
CLOSE c1
DEALLOCATE c1
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