Toon posts:

[Stored Procedure] Geen resultaat bij lege variable

Pagina: 1
Acties:

Verwijderd

Topicstarter
Onderstaande sp werkt prima behalve als beide of 1 variable leeg is. Hoe kan dit afvangen? De huidge opzet volstaan niet maar waarom weet ik niet. Hij geeft geen foutmelding op de syntax ook niet als ik de sp aanroep in een asp pagina. Kan iemand mij helpen?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE  PROCEDURE sp_plaatsnamen
@myGemeente varchar (255),
@myProvincie varchar(255)
AS

If @myGemeente IS NOT NULL AND @myProvincie IS NOT NULL
BEGIN
Select Plaats From vrom_plaatsnamen
WHERE Provincie = @myProvincie AND Gemeente = @myGemeente
GROUP BY Plaats
ORDER BY Plaats asc
END
ELSE
BEGIN
Select Plaats From vrom_plaatsnamen
GROUP BY Plaats
ORDER BY Plaats asc
END
GO

Verwijderd

Op regel 6 checkt hij of de parameters leeg zijn. Als een van beide leeg is, doet hij dus niets. Oftewel, schrijf een else met een zinvolle query zonder het gebruik van deze waardes.

/me was zijn leesbril vergeten :X |:(

[ Voor 15% gewijzigd door Verwijderd op 28-09-2005 12:00 ]


  • whoami
  • Registratie: December 2000
  • Nu online
Wat is prima werken, en wat is 'niet prima werken' ? Maw, wat gebeurt er als één van die variablen (ik neem aan dat je doelt op de parameters die je aan je SP geeft) leeg is ?

Heb je al eens geprobeert om die checks te veranderen ?
code:
1
@myGemeente != NULL AND @myProv != NULL

dus, ipv 'IS NOT NULL' ?

Offtopic: het is beter als je je stored procedures niet met sp_ prefixt. SQL Server gaat er dan nl. vanuit dat het een 'system stored procedure' betreft. Dat impliceert dat Sql Server dan eerst de 'master' DB gaat doorzoeken naar die SP, en als ie ze niet gevonden heeft, gaat ie in de 'current DB' kijken. Je kunt je dus wel voorstellen, dat dit niet zo goed is voor de performantie.

En waarom doe je een group by als je geen aggregated functies gebruikt in je select list ? Normaal gezien zou Sql Server dat ook niet mogen toelaten. Het is gewoon verkeerd gebruik van group by.

[ Voor 13% gewijzigd door whoami op 28-09-2005 11:58 ]

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Nu online
Verwijderd schreef op woensdag 28 september 2005 @ 11:55:
Op regel 6 checkt hij of de parameters leeg zijn. Als een van beide leeg is, doet hij dus niets. Oftewel, schrijf een else met een zinvolle query zonder het gebruik van deze waardes.
:?
Hij doet toch wel iets , nl een query met gebruik van deze parameters.
In z'n else doet hij een query zonder die param's te gebruiken, of lees ik nu over iets ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Het veranderen van de checks geeft hetzelfde resultaat: hiermee bedoel ik dat er geen records worden teruggegeven als 1 of beide variabelen leeg zijn.
Is jou voorgestelde aanpassing een betere manier voor het samenstellen van een query of een andere manier?
Je opmerking over de GROUP by is helemaal waar, echter zit ik met een ge-orven tabelstructuur met de volgende structuur: plaats, gemeente, provincie, waabij er meerdere gemeentes onder een provincie vallen, en meerder plaatsen per gemeente. Wat zou een alternatief zijn om zonder GROUP by toch de juiste filtering te kunnen toepassen?

Ik gebruik deze SP om een menulist te vullen met items uit de db die voldoen aan de eerdere gekozen variablen provincie en gemeente:
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<select name="plaatsnamen">
<option value="">Maak een keuze..</option>
<%
sSql = "sp_plaatsnamen '" & VarGemeente &"','" & VarProvincie &"'"
Set resultaatPlaatsnaam = connectie.Execute(sSql)  
do while not resultaatPlaatsnaam.EOF     
%> 
<option value="<%=Stringchecker(resultaatPlaatsnaam("Plaats"))%>" <%IF VarPlaats = Stringchecker(resultaatPlaatsnaam("Plaats")) THEN%>selected<%END IF%>><%=resultaatPlaatsnaam("Plaats")%></option>
<%
resultaatPlaatsnaam.movenext
LOOP
%> 
</select>


Nog bedankt voor de tip van de naam van de sp, kan ik de naam achteraf nog veranderen met ALTER Procedure of moet ik deze opnieuw aanmaken?

Verwijderd

Topicstarter
whoami schreef op woensdag 28 september 2005 @ 11:59:
[...]


:?
Hij doet toch wel iets , nl een query met gebruik van deze parameters.
In z'n else doet hij een query zonder die param's te gebruiken, of lees ik nu over iets ?
Zoals je het omschrijft zou het moeten werken: als er variablen aanwezig zijn dan query met filter anders query zonder filter. De query met filter wordt prima uitgevoerd als de variablen gevuld zijn, de ELSE qeury wordt helemaal niet uitgevoerd..daar zit het probleem voor mij..

  • whoami
  • Registratie: December 2000
  • Nu online
Verwijderd schreef op woensdag 28 september 2005 @ 12:17:
Het veranderen van de checks geeft hetzelfde resultaat: hiermee bedoel ik dat er geen records worden teruggegeven als 1 of beide variabelen leeg zijn.
Is jou voorgestelde aanpassing een betere manier voor het samenstellen van een query of een andere manier?
Je opmerking over de GROUP by is helemaal waar, echter zit ik met een ge-orven tabelstructuur met de volgende structuur: plaats, gemeente, provincie, waabij er meerdere gemeentes onder een provincie vallen, en meerder plaatsen per gemeente. Wat zou een alternatief zijn om zonder GROUP by toch de juiste filtering te kunnen toepassen?
Als je de provincie slechts 1 x wilt tonen, welke bijhorende gemeente wil je dan tonen ?
Nog bedankt voor de tip van de naam van de sp, kan ik de naam achteraf nog veranderen met ALTER Procedure of moet ik deze opnieuw aanmaken?
sp_rename zou je kunnen gebruiken.
Verwijderd schreef op woensdag 28 september 2005 @ 12:19:
[...]


Zoals je het omschrijft zou het moeten werken: als er variablen aanwezig zijn dan query met filter anders query zonder filter. De query met filter wordt prima uitgevoerd als de variablen gevuld zijn, de ELSE qeury wordt helemaal niet uitgevoerd..daar zit het probleem voor mij..
Zijn die parameters dan wel NULL ?
Verander die check eens naar dit:
code:
1
IF ISNULL(@provincie, ''') != '' AND ISNULL(@gemeente, '') != ''

[ Voor 22% gewijzigd door whoami op 28-09-2005 12:22 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op woensdag 28 september 2005 @ 12:21:
[...]
Als je de provincie slechts 1 x wilt tonen, welke bijhorende gemeente wil je dan tonen ?
[...]
sp_rename zou je kunnen gebruiken.
[...]
Zijn die parameters dan wel NULL ?
Verander die check eens naar dit:
code:
1
IF ISNULL(@provincie, ''') != '' AND ISNULL(@gemeente, '') != ''
Perfect, dat was het. (na het weghalen van een ' bij de provincie chec ) Ik ging ervan uit dat als de variable nog niet gezet (gekozen) was hij automatisch NULL zou zijn, ik had misschien eerst de var moeten declareren.

Er zijn in totaal 3 pull down menu's (provincie, gemeente, plaats), Na het kiezen van een provincie wil ik de gemeente pulldown laten vullen met alle gemeentes waarvan de provicie de gekozen provincie is, na het kiezen van een gemeente binnen de gekozen provincie wil ik de derde pulldown laten vullen van plaatsen die voldoen aan de beide variabelen.

  • whoami
  • Registratie: December 2000
  • Nu online
Verwijderd schreef op woensdag 28 september 2005 @ 12:34:
[...]


Perfect, dat was het. (na het weghalen van een ' bij de provincie chec ) Ik ging ervan uit dat als de variable nog niet gezet (gekozen) was hij automatisch NULL zou zijn, ik had misschien eerst de var moeten declareren.
Blijkbaar niet, maar je kunt wel 'default values' gaan specifieren.
code:
1
2
CREATE PROCEDURE GetXXXX(@myProvince   VARCHAR(255) = NULL,
      ...

Als je 't zo doet, dan kan je wel checken op NULL.
Er zijn in totaal 3 pull down menu's (provincie, gemeente, plaats), Na het kiezen van een provincie wil ik de gemeente pulldown laten vullen met alle gemeentes waarvan de provicie de gekozen provincie is, na het kiezen van een gemeente binnen de gekozen provincie wil ik de derde pulldown laten vullen van plaatsen die voldoen aan de beide variabelen.
[/]
Ok, maar daarvoor hoef je toch niet -binnen- je query gaan groeperen ? Die haalt gewoon de gegevens op. De manier waarop je ze representeert, is iets wat je op je 'client' moet afhandelen.

[ Voor 35% gewijzigd door whoami op 28-09-2005 12:42 ]

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op woensdag 28 september 2005 @ 12:41:
Ok, maar daarvoor hoef je toch niet -binnen- je query gaan groeperen ? Die haalt gewoon de gegevens op. De manier waarop je ze representeert, is iets wat je op je 'client' moet afhandelen.
Wat is dan het voordeel hiervan? Ik snap het niet zo goed, juist voor preformance redenen heb ik voor de meest gebuikte query's een SP gemaakt, en nu moet ik het filter gaan toepassen aan de client side..
Ok je kan je vragen stellen aan de opbouw van de tabel, maar de GROUP by binnen de query kan toch niet zoveel kwaad?

  • whoami
  • Registratie: December 2000
  • Nu online
Stored procedures gaan in de meeste gevallen (zeker als het gewoon gebruikt wordt voor het ophalen van gegevens) niet beter gaan presteren dan een parametrized query.

Ik snap gewoon niet waarom je in die query wilt gaan groeperen ? Op wat ga je grouperen, op provincie-naam ? En dan, wat doe je dan met de naam van de gemeente ? Als je iedere unieke provincie-naam slechts 1 keer wilt ophalen, welke gemeente ga je dan gaan ophalen ?
Kijk:
oost vlaanderen gent
oost vlaanderen deinze
oost vlaanderen aalter
west vlaanderen kortrijk
west vlaanderen roeselare
Als je nu slechts 1x oostvlaanderen en 1x west vlaanderen wilt tonen, welke gemeente ga je dan ophalen ?

https://fgheysels.github.io/

Pagina: 1