Avatar billede jennemaan Nybegynder
15. februar 2001 - 11:22 Der er 4 kommentarer og
2 løsninger

Dynamisk kriterie i stored procedure

Jeg har en tabel (Selections) indeholdende selektionskriterier.

ID  Criteria
1    Where Foo<>Bar
2    Where Foo=Bar AND Whatever=\'Something\'
.
.

Er det muligt at gøre noget i retning af følgende i en stored procedure:
.
.
Select @au_Criteria=Criteria From Selections Where ID=@p_CriteriaID //Parameter med id på selektion

Select * From FooBars @au_Criteria //Så @au_Criteria indeholder kriteriet fra Selections

Sagt på en anden måde:

Kan man opbygge dynamiske kriterier i variable og anvende dem i selects?

Mit alternativ er at lave hele pøllemøllen vha. ado, men det er laaaaaaaaaaangsomt i forhold til at skrive en stored proc. (når man sammenligner stored proc\'en uden kriterie med den tilsvarende i ado).


/Jennemaan
Avatar billede nolle_k Nybegynder
15. februar 2001 - 11:48 #1
Hvis du vil gøre det på den måde er du nødt til at lave det som en streng, der indsættes der herefter køres ved hjælp af Exec!

Ellers skal du lave fem View, der hver især bruger et sæt kriterier!

Det vil sige

IF @p_CriteriaID = 1
  SELECT * FROM View1
ELSE IF @p_CriteriaID = 2
  SELECT * FROm View2

Men det er nok mere bøvlet end du ønsker!

Hvis der tilføjes kriterier hele tiden vil det heller ikke være at foretrække da du så skal lave et nyt view hver gang, der laves et kriterium!
Hvis jeg var dig ville jeg opbygge det hele som en streng og så bruge EXEC Query !!

//Nolle_K

Avatar billede jennemaan Nybegynder
15. februar 2001 - 11:54 #2
Kan jeg opbygge den streng i min stored procedure???

Hvis ja, hvordan?
Avatar billede gandalfthewhite Nybegynder
15. februar 2001 - 12:16 #3
DECLARE @sSQL NVarChar(1000)
SELECT @sSQL = \'Select * From FooBars \' + @au_Criteria
EXEC (@sSQL)

Hvis nødvendigt så lav en CONVERT(NVarChar(100), @auCriteria)
Avatar billede nolle_k Nybegynder
15. februar 2001 - 12:23 #4
declare @a varchar(50)

SET @a = \'SELECT * FROM Types\'

EXEC (@a)
Avatar billede jennemaan Nybegynder
15. februar 2001 - 17:07 #5
Morsomt er det dog at jeg ikke kan:

DECLARE @a varchar(50)
SET @a = \'SELECT * Into #tmpTypes FROM Types\'
EXEC (@a)

Men kan

DECLARE @a varchar(50)
SET @a = \'SELECT * FROM Types\'
CREATE TABLE #tmpTypes
INSERT INTO #tmpTypes EXEC (@a)


Har EXEC\'en ikke adgang til samme temp objekter som den oprindelige connection???

;o)

/Jennemaan

Avatar billede skjoldby Nybegynder
21. december 2002 - 12:42 #6
Interessant emne. Lige et lille tillægsspørgsmål. Går det ud over hastigheden og performance i øvrigt at opbygge den som en streng?
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Sektionschef til Enterprise Arkitektur i Forsvaret på Østerbro

Djurslands Bank

IT-udvikler

IT-Universitetet i København

CIO