/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Stored procedure - Eksisterer værdi?
Fra : Thomas Voller


Dato : 22-05-05 21:10

Hej NG.



På en MSSQL-server, via en stored procedure, hvad er så den nemmeste måde at
tjekke om en given værdi eksisterer i en tabel? Derefter skal der returneres
en sand/falsk værdi.
ALTER PROCEDURE EmailExists (@Query varchar(200))
AS
If Exists(SELECT ID FROM Newsletter WHERE Email = @Query)
return ?
Else
return ?

Der jeg er lidt i vildrede er, når der skal returneres en værdi, f.eks. 1
for sand og 0 for falsk. Jeg kan godt skrive f.eks. "return 1", men hvordan
fanger jeg så den værdi? Når jeg kører proceduren siger den bare at
proceduren blev udført, men der blve ikke returneret nogen værdier.

Hvordan gør man?



 
 
Jens Gyldenkærne Cla~ (22-05-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 22-05-05 22:23

Thomas Voller skrev:

> På en MSSQL-server, via en stored procedure, hvad er så den
> nemmeste måde at tjekke om en given værdi eksisterer i en
> tabel?

Jeg ville bruge COUNT:

SELECT COUNT(*) AS mailAntal FROM Newsletter WHERE Email = @Query

Hvis Email er et unikt felt kan der kun returneres 0 (adressen
findes ikke) eller 1 (adressen findes).



> Der jeg er lidt i vildrede er, når der skal returneres en
> værdi, f.eks. 1 for sand og 0 for falsk. Jeg kan godt skrive
> f.eks. "return 1", men hvordan fanger jeg så den værdi?

Hvis du skal have en værdi ud kan du enten bruge et postsæt eller
en OUTPUT variabel. Postsættet er det letteste at lave - du skal
bare skrive SELECT i stedet for RETURN, og så give et navn med AS.
Men en OUTPUT-variabel er nok et mere korrekt valg når du bare skal
returnere én værdi.

Du kan finde eksempler i BOL (onlinehjælpen) under "output
parameters".
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Peter Lykkegaard (23-05-2005)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-05-05 12:50

"Jens Gyldenkærne Clausen" wrote

> Jeg ville bruge COUNT:
> SELECT COUNT(*) AS mailAntal FROM Newsletter WHERE Email = @Query
>
Nope

Exists afbryder ved første forekomst og returnerer "sand"
Count tæller alle forekomster og returnerer antallet af forekomster

Exists vil alt andet lige bruge færre ressourcer og slippe forbindelsen
hurtigere

- Peter



Jens Gyldenkærne Cla~ (23-05-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 23-05-05 13:23

Peter Lykkegaard skrev:

>> Jeg ville bruge COUNT:

> Exists afbryder ved første forekomst og returnerer "sand"

- men den returværdi kan man vel ikke sende direkte ud af sp'en?

Så vidt jeg ved kan man ikke skrive:

SET @returval = EXISTS (SELECT...)

Man kan selvfølgelig lave en tildeling baseret på if (a la det originale
eksempel):

IF EXISTS(SELECT...)
SET @returval = 1
ELSE
SET @returval = 0

- men det giver en ekstra linje til selve tildelingen af værdi.

> Count tæller alle forekomster og returnerer antallet af forekomster

Jeg er klar over at der vil være forskel hvis søgefeltet ikke er unikt
indekseret, men hvis der er et unikt indeks på mailfeltet, bør der vel
ikke være mærkbar forskel på ydelsen?

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Peter Lykkegaard (23-05-2005)
Kommentar
Fra : Peter Lykkegaard


Dato : 23-05-05 15:12

"Jens Gyldenkærne Clausen" wrote

> Jeg er klar over at der vil være forskel hvis søgefeltet ikke er unikt
> indekseret, men hvis der er et unikt indeks på mailfeltet, bør der vel
> ikke være mærkbar forskel på ydelsen?
>
Den ligger på 48,6% til "count" og 51.4% til "if exists" ved unikt index
(pokkers
Tabellen indeholder 74140 records

En anden tabel (382951 records) med to forekomster af nøglen
Den ligger på 49,99% til "count" og 50.01% til "if exists"

Anden nøgle med 46 forekomster
53.5% ved "count" og 46.5% ved "if exists"

Det er nu "sjovt" at efterprøve teorien i praksis

- Peter




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste