[MSSQL, T-SQL] Variabele uit resultaat EXECUTE statement

Pagina: 1
Acties:

  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11-2025
Ik heb ongeveer het volgende:

code:
1
2
DECLARE @Var VARCHAR(50)
EXEC('SELECT Value FROM TABLE WHERE PK=12')

De EXEC geeft altijd 1 of 0 rijen terug. Nu wil ik graag het resultaat Value in variabele @Var hebben.
Het enige wat ik tot nu toe kan verzinnen is het resultaat in een tijdelijke tabel te zetten en die met een cursor/fetch weer uit te lezen.
Kan dit eenvoudiger?

Het gaat om een bestaand systeem wat ik niet creatief volledig kan aanpassen. Zo komt het statement uit EXEC uit een tabel en kan nog een stuk ingewikkelder zijn.

Verwijderd

code:
1
2
DECLARE @Var VARCHAR(50)
SELECT @Var=Value FROM TABLE WHERE PK=12


Denk niet dat het met EXEC werkt...

[ Voor 33% gewijzigd door Verwijderd op 02-12-2005 10:43 ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Dat gaat niet werken omdat @var niet in de juiste scope is gedeclareerd, je zult een foutmelding krijgen dat @var niet is gedeclareerd.

Je zou eventuuel Sp's met een output parameter kunnen gebruiken, maar als je geen invloed hebt op het statement denk ik niet dat dit mogelijk is.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11-2025
M'n logica zei al dat een resultaat 'tabel' niet in een enkele variabele is te stoppen, maar misschien was er toch een slimmigheidje voor. Zo te zien ga ik inderdaad aan de slag met een cursor.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ik denk niet dat je een cursor nodig hebt om uit de temp tabel te selecten?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
Dit kan alleen via sp_executesql

  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11-2025
P_de_B schreef op vrijdag 02 december 2005 @ 11:21:
Ik denk niet dat je een cursor nodig hebt om uit de temp tabel te selecten?
Je hebt gelijk. Ik zat inmiddels zo in de cursors dat ik denk niet meer zonder te kunnen :)

Met sp_executesql kan ik op het eerste gezicht wel inputparameters opgeven maar krijg ik net als bij EXECUTE alleen maar een tabel retour waardoor ik hetzelfde probleem heb.

Voor de liefhebber heb ik voorlopig het volgende resultaat:
code:
1
2
3
4
5
6
7
8
9
10
DECLARE @Var VARCHAR(50)
CREATE TABLE #TempValues (
  TempValue VARCHAR(50)
)
-- loop weggelaten
INSERT #TempValues EXEC('SELECT Value FROM Tabel WHERE PK=12')
SELECT @Var = TempValue FROM #TempValues
DELETE FROM #TempValues

DROP TABLE #TempValues

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

code:
1
DELETE FROM #TempValues
is natuurlijk een beetje zinloos. Vind je ook niet?

Today's subliminal thought is:


Verwijderd

xtra schreef op vrijdag 02 december 2005 @ 12:56:
Met sp_executesql kan ik op het eerste gezicht wel inputparameters opgeven maar krijg ik net als bij EXECUTE alleen maar een tabel retour waardoor ik hetzelfde probleem heb.
Ik heb toch even naar aanleiding van de post van Robbemans de documentatie nagelezen, en hij heeft gelijk hoor:

code:
1
2
3
4
5
6
7
DECLARE @Var VARCHAR(50)
EXEC sp_executesql 
     N'SELECT @VarOut = Value FROM TABLE WHERE PK=12', 
     N'@VarOut VARCHAR(50) OUTPUT',
     @VarOut = @Var OUTPUT

PRINT @Var  --Geeft de 'Value' van PK=12


(Getest op Sql2K5)

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Het probleem is echter dat -volgens mij- de string die in de EXEC/sp_executesql komt te staan niet te manipuleren is omdat die uit een ander systeem komt.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • xtra
  • Registratie: November 2001
  • Laatst online: 19-11-2025
Debbus en P_de_B: Ik moet het inderdaad doen met de gegevens uit een ander systeem. Met een beetje stringmanipulatie moet er wel '@VarOut = ' tussen te plakken zijn. De kans op fouten wordt dan wel een stuk groter denk ik. Nu benader ik nog zoveel mogelijk het bestaande systeem. Het idee is namelijk dat ik een groot deel ASP-code naar een SP verplaats om wat performance te winnen.
Annie schreef op vrijdag 02 december 2005 @ 14:43:
code:
1
DELETE FROM #TempValues
is natuurlijk een beetje zinloos. Vind je ook niet?
Als je de code zo ziet staan wel. Als je '-- loop weggelaten' erbij haalt dan wordt het al wat zinvoller ;)
code:
1
2
3
4
5
6
7
8
9
10
11
DECLARE @Var VARCHAR(50)
CREATE TABLE #TempValues (
  TempValue VARCHAR(50)
)
WHILE 'iets'
BEGIN
  INSERT #TempValues EXEC('SELECT Value FROM Tabel WHERE PK=12')
  SELECT @Var = TempValue FROM #TempValues
  DELETE FROM #TempValues
END
DROP TABLE #TempValues

[ Voor 27% gewijzigd door xtra op 02-12-2005 14:58 ]

Pagina: 1