[MSSQL2K]resultaten van dynamische sql gebruiken binnen stp

Pagina: 1
Acties:
  • 158 views sinds 30-01-2008
  • Reageer

  • admiral866
  • Registratie: April 2000
  • Laatst online: 21:54

admiral866

The King Personality Disorder

Topicstarter
Ik wil in een stored procedure een gedeelte dynamische sql gebruiken.
Dus het hele sql commando komt in een variabele, in dit geval @sql.
Dan kan dit worden uitgevoerd met exec(@sql)

Hetgeen wat die sql statement oplevert (een count) wil ik verderop in dezelfde stored procedure gebruiken. Hoe kan ik dat het beste opstellen?

Ik zat te denken aan iets als
SELECT @rows = exec(@sql)
Maar dat mag niet.

Of het dynamische gedeelte in een aparte stp? Maar dan?

Kortom, hoe krijg ik de waarden uit een dynamische query binnen sql?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
sp_executesql('een sql query') kan met parameters werken.

Weet je trouwens heel zeker dat je dynamische SQL nodig hebt?

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


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je zou ook een user-defined function kunnen gebruiken ;)
Hangt er van af wat je aan 't doen bent :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:35
sp_executesql gebruiken, en binnen de string die je aan sp_executesql doorgeeft, en een output parameter gebruiken in je sql statement dat je aan sp_executesql doorgeeft.

Er staat zeker een voorbeeld van in de Books Online, want ik heb het een tijd geleden zelf gebruikt. :)

zo dus:

code:
1
2
3
4
5
DECLARE @aVarInTheSP INT

sp_executesql N'select @bliep = count(1) from tabel',
                      N'@bliep INT OUTPUT,
                      @bliep = @aVarInTheSP

[ Voor 26% gewijzigd door whoami op 04-09-2006 15:30 ]

https://fgheysels.github.io/


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Die UDF kun je in ieder geval ook inline gebruiken, dat zou handig kunnen zijn inderdaad.

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


  • admiral866
  • Registratie: April 2000
  • Laatst online: 21:54

admiral866

The King Personality Disorder

Topicstarter
ja, weet heel zeker dat het dynamisch moett. Jammer maar helaas.
En thanks met sp_executesql moet het wel lukken :D

  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Kan je wat concreter uitleggen wat je wil bereiken, en hoe je dat gaat doen? Toch wel benieuwd ;)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • admiral866
  • Registratie: April 2000
  • Laatst online: 21:54

admiral866

The King Personality Disorder

Topicstarter
na het lezen van http://databases.aspfaq.c...-through-a-recordset.html
gebruik ik de rowcount optie.
Kan je handig een pagina nummer aangeven en hoeveel per pagina er moeten zijn.
Daarvoor moet je eerst uitzoeken hoeveel rows er zijn volgens de criteria.
En aangezien de query dynamisch is, wilde ik dus weten hoe je een resultaat van een dynamische query krijgt. Met sp_executesql dus :)

Nu heb ik in de code zo dat men iets kan zoeken/filteren.
En daarbij hoeven niet alle argumenten waarden te hebben. Als er bijvoorbeeld 5 filter mogelijkheden zijn dan kan men er 3 opgeven.
En dus is er een dynamische query nodig. Omdat de argumenten niet van belang zijn niet in de query opgenomen hoeven te worden.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
admiral schreef op maandag 04 september 2006 @ 16:50:
na het lezen van http://databases.aspfaq.c...-through-a-recordset.html
gebruik ik de rowcount optie.
Kan je handig een pagina nummer aangeven en hoeveel per pagina er moeten zijn.
Daarvoor moet je eerst uitzoeken hoeveel rows er zijn volgens de criteria.
En aangezien de query dynamisch is, wilde ik dus weten hoe je een resultaat van een dynamische query krijgt. Met sp_executesql dus :)

Nu heb ik in de code zo dat men iets kan zoeken/filteren.
En daarbij hoeven niet alle argumenten waarden te hebben. Als er bijvoorbeeld 5 filter mogelijkheden zijn dan kan men er 3 opgeven.
En dus is er een dynamische query nodig. Omdat de argumenten niet van belang zijn niet in de query opgenomen hoeven te worden.
Je kunt de query ook niet-dynamisch maken en de parameters toch meenemen ;)

SQL:
1
2
3
4
5
6
7
8
9
CREATE PROCEDURE [FindFoo]
    @FindCode varchar(100),
    @FilterGroup as int = null
AS

Select foo.id, foo.code, foo.body, foo.price, foo.groupid
from foo
where (foo.code= @FindCode) and ((@FilterGroup is null) or (foo.groupid = @FilterGroup))
GO

Deze (nep) SP heeft een optionele parameter. Als die niet wordt meegegeven worden alle foo's teruggegeven waar foo.code = @FindCode. Wordt de optionele parameter wél meegegeven dan worden de resultaten gefilterd op groupid = @FilterGroup.

En of je dat dan met 1 of 15 parameters doet maakt geen fluit uit ;)

[ Voor 3% gewijzigd door RobIII op 04-09-2006 16:59 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • admiral866
  • Registratie: April 2000
  • Laatst online: 21:54

admiral866

The King Personality Disorder

Topicstarter
kweenie, maar dat werkt niet helemaal met een tabel opzet als deze denk ik?
Misschien was ik niet helemaal duidelijk hoor.

tabel voorbeeld:
code:
1
id-titel-optie1-optie2-optie3-optie4-optie5-optie6-optie7-optie8

In de optie velden staan verschillende verzamelingen van codes.
Daarnaast kan men via een backend instellen welke opties in het filter bruikbaar moeten zijn.
Dat kunnen dan bijvoorbeeld alleen 2, 3 en 6 zijn.

[ Voor 3% gewijzigd door admiral866 op 04-09-2006 17:23 ]


  • Robbemans
  • Registratie: November 2003
  • Laatst online: 17-07-2025
als je opties op deze manier opslaat zul je je model moeten aanpassen zodra er een optie bij komt. Ias dat echt wat je wil?

Wellicht is het handiger om een 'gedefinieerde opties' tabel aan te leggen waarin je de opties opslaat. je hebt dan ook geen dynamische SQL meer nodig.

  • admiral866
  • Registratie: April 2000
  • Laatst online: 21:54

admiral866

The King Personality Disorder

Topicstarter
hehe ja mijn idee! :D
Alleen is dat geen optie.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
admiral schreef op maandag 04 september 2006 @ 17:22:
kweenie, maar dat werkt niet helemaal met een tabel opzet als deze denk ik?
Misschien was ik niet helemaal duidelijk hoor.

tabel voorbeeld:
code:
1
id-titel-optie1-optie2-optie3-optie4-optie5-optie6-optie7-optie8

In de optie velden staan verschillende verzamelingen van codes.
Daarnaast kan men via een backend instellen welke opties in het filter bruikbaar moeten zijn.
Dat kunnen dan bijvoorbeeld alleen 2, 3 en 6 zijn.
En waarom zou mijn methode dan niet werken?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1