Avatar billede terry Ekspert
15. juli 2003 - 09:07 Der er 18 kommentarer og
2 løsninger

Help with Stored Procedure

The following Stored procedure can be called with no parameter where I want it to return ALL records,
or with a single paramater where it should only return those where TC.PostCodeID = @postcode.

The SP works when using a parameter, the problem is that when no paramaters are given only those where TC.PostCodeID Is Not Null are returned.

So the question is I want it to return ALL records including those where TC.PostCodeID = NULL when no paramaters are used.


NOTE: This is only an example, the WHERE clause contains further paramaters. I have also tried setting ANSI_NULLS OFF before creating the SP!


CREATE PROC spTest ( @Postcode int=Null )

AS
SELECT * FROM  tblContact TC
WHERE TC.PostCodeID =  IsNull(@PostCode, TC.PostCodeID)
Avatar billede arne_v Ekspert
15. juli 2003 - 09:12 #1
Grunden er jo klar: NULL <> NULL ifølge SQL.
Avatar billede arne_v Ekspert
15. juli 2003 - 09:13 #2
Og løsningen er vel ligeså klar: der skal en IF ind og så
2 forskellige SELECT.
Avatar billede arne_v Ekspert
15. juli 2003 - 09:14 #3
Så er det kun lige spørgsmålet om noget syntax.
Avatar billede terry Ekspert
15. juli 2003 - 09:15 #4
Hi Arne, yes and thats my problem :o)
SP's isnt my hot spot if I made a dynamic SQL I could do it in no time but I would like to use an SP in this case.
Avatar billede arne_v Ekspert
15. juli 2003 - 09:16 #5
CREATE PROC spTest ( @Postcode int=Null )

AS
IF @Postcode IS NULL
    SELECT * FROM  tblContact TC
ELSE
    SELECT * FROM  tblContact TC
    WHERE TC.PostCodeID =  @PostCode
Avatar billede arne_v Ekspert
15. juli 2003 - 09:17 #6
[efter hukommelsen - ikke testet - check]
Avatar billede terry Ekspert
15. juli 2003 - 09:17 #7
15/07-2003 09:13:42 Yes I know thats a solution but I would like if possible to get away from this as there are a number of paramaters and I can imagine how many SELECTS I would need :o)
Avatar billede molberg Nybegynder
15. juli 2003 - 09:18 #8
Prøv med:
CREATE PROC spTest ( @Postcode int=Null )
AS
if @PostCode is null
  SELECT * FROM  tblContact TC
else
  SELECT * FROM  tblContact TC
WHERE TC.PostCodeID = @PostCode

-Steen
Avatar billede terry Ekspert
15. juli 2003 - 09:18 #9
NOTE: This is only an example, the WHERE clause contains further paramaters. :o)
Avatar billede terry Ekspert
15. juli 2003 - 09:20 #10
I'm after a dynamic WHERE
Avatar billede terry Ekspert
15. juli 2003 - 09:21 #11
I'm gone for a while will take a look later, thanks so far!
Avatar billede arne_v Ekspert
15. juli 2003 - 09:32 #12
Du leder altså efter noget ligesom Access hvor man i VB konkatanerer
strenge på sin SQL sætning og så udførerer den til sidst.

Jeg har aldrig set sådan noget i en SP (men jeg er absolut ikke
SP ekspert så det udelukker ikke at det findes).
Avatar billede molberg Nybegynder
15. juli 2003 - 10:18 #13
Maybe this can giva you an idea:
create proc usp_TestProc
    @Postcode varchar(10) = null
as
declare @SQL varchar(200)
declare @WHERE varchar(200)
select @WHERE = 'PostalCode=''' + @PostCode + ''''
select @SQL = 'select * from Customers' + coalesce(' WHERE ' + @WHERE,'')
exec (@SQL)

-Steen
Avatar billede arne_v Ekspert
15. juli 2003 - 10:40 #14
Aha - så man kan godt construere SQL on the fly.

Og kombineret med en IF må det være det Terry er efter.
Avatar billede arne_v Ekspert
15. juli 2003 - 10:41 #15
Men den normale performance forbedring ved SP fordi de compiles
ryger jo nok.
Avatar billede molberg Nybegynder
15. juli 2003 - 10:46 #16
Man bør nok sætte en WITH RECOMPILE ind når der er så stor forskel på hvor meget SP'en returnerer, det har du ret i. -Steen
Avatar billede terry Ekspert
15. juli 2003 - 12:48 #17
Thanks to you both for your input, I think I'll stick to the easy way and build the SQL dynamically in my application (Access :o) ). Now the next problem is!
How do I share out the points? I have rejected your answer Arne, didnt mean to, so if you and Steen can place an answer I'll see if I can share the points between you both.
Avatar billede molberg Nybegynder
15. juli 2003 - 12:50 #18
OK
Avatar billede arne_v Ekspert
15. juli 2003 - 12:58 #19
OK
Avatar billede terry Ekspert
15. juli 2003 - 13:09 #20
Hope the points are acceptable, once again thanks :o)
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