Avatar billede left Nybegynder
07. maj 2003 - 05:52 Der er 1 kommentar og
2 løsninger

Dynamiske stored procedure

Jeg skal have opbygget en stored procedure. Da den skal indgå i en søgefunktion, skal den kunne modtage 0 til 4 forskellige krav til sql-udtrykket. Herved skal sql'en køres med et dynamisk antal WHERE-kald.

Hvis der ikke er angivet nogle kriterier:
SELECT Navne FROM Tabel

Hvis @Kol_1 indeholder data:
SELECT Navne FROM Tabel WHERE Kolonne1 = @Kol_1

Hvis @Kol_2 og @Kol_4 indeholder data:
SELECT Navne FROM Tabel WHERE Kolonne1 = @Kol_1 AND
Kolonne4 = @Kol_4

Osv...

Hvordan gøres dette mere smart end at oprette masser af stored procedures?
Avatar billede bjornicle Nybegynder
07. maj 2003 - 08:54 #1
du kan gore noget lign:

if @kol_1 is not null
select navne.....

else if @kol_2 is not null
...

osv.

eller du kan gore noget lign:

set @sql = 'select navne from table where 1 = 1'

if @kol_1 is not null
set @sql = @sql + ' and kolonne1 = '+ @kol_1

exec(@sql)
Avatar billede venne Nybegynder
07. maj 2003 - 09:29 #2
Det er ikke nødvendigvis særlig effektivt SQL, men dette burde virke:

SELECT Navne
FROM Tabel
WHERE (@Kol_1 IS NULL OR @Kol_1 IS NOT NULL AND Kolonne1 = @Kol_1)
  AND (@Kol_2 IS NULL OR @Kol_2 IS NOT NULL AND Kolonne2 = @Kol_2)
  AND (@Kol_3 IS NULL OR @Kol_3 IS NOT NULL AND Kolonne3 = @Kol_3)
  AND (@Kol_4 IS NULL OR @Kol_4 IS NOT NULL AND Kolonne4 = @Kol_4)

/venne
Avatar billede janus_007 Nybegynder
08. maj 2003 - 09:15 #3
Undgå at lave dynamiske sp's, det kræver meget længere compiletime end bare traditionel SQL!

Den slags simple forespørgsler som du vil lave der, er meget nemmere og mere performance venligt hvis det bygges op i dit logiske lag... ASP/ PHP eller hvad det er :O)

Som KonFutse sagde, der er ingen grund til at skyde myg med kanoner ;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