Avatar billede curriculum Nybegynder
15. oktober 2004 - 12:22 Der er 9 kommentarer og
1 løsning

select top x

Jeg har lavet en stored procedures, som jeg gerne vil skal kunne selecte en variabel top function, lign...

CREATE PROCEDURE st_name @top int AS
select top @top from [table_name]

Hvordan får jeg syntax'en korrekt ??
Avatar billede arne_v Ekspert
15. oktober 2004 - 12:25 #1
Jeg tror ikke au du kan bruge en parameter der.

CREATE PROCEDURE st_name @top int AS
exec('select top ' + @top + ' from [table_name]')

kan muligvis bruges
Avatar billede veronica Nybegynder
15. oktober 2004 - 16:09 #2
Prøv dette:

CREATE PROCEDURE st_name @top int AS
BEGIN
DECLARE @sqlStatement nvarchar(200)
SET @sqlStatement = 'select top ' + convert(varchar, @top) + ' [column_names] from [table_name]'
EXECUTE sp_executesql @sqlStatement
END
Avatar billede curriculum Nybegynder
18. oktober 2004 - 22:40 #3
jeg anvender arne_v kommentar, så hvis du vil give mig et svar !
Avatar billede arne_v Ekspert
18. oktober 2004 - 22:43 #4
svar
19. oktober 2004 - 14:34 #5
Du skal dog være opmærksom på at dette lige pludseligt er blevet til Dynamisk SQL. Det kan være langsomt at få afviklet på SQL Serveren. Hvis du kan nøjes med et fast antal muligheder, f.eks. @top lig med enten 10, 20 eller 100, så undgår du dynamisk SQL, og har derved stadig den gode performance.
19. oktober 2004 - 14:37 #6
For en grundig orientering om dynamisk SQL. så kig i http://www.sommarskog.se/dynamic_sql.html
Avatar billede curriculum Nybegynder
20. oktober 2004 - 00:48 #7
I mit tilfælde skulle mulighederne for TOP 2,4,8 være mulige, men istedet for at lave alt muligt kode fiduser, var det lettest at løse opgaven med denne dynamiske SQL procedure.

Den Sommerskog artikellen var ellers godt input :) dog lidt skræmmende...
20. oktober 2004 - 08:44 #8
ja, dynamisk SQL er let. Men det bliver hurtigt noget rod, der giver en utålelig performance. Når man så har 100-vis af dynamiske sql kald, så er det ret træls at skulle i gang. Derfor er det nok bedst at tage tyren ved hornene, og vedtage en kode-standard der undlader brug af Dynamisk SQL.
Jeg har iøvrigt flere links om SQL Injection. Det er virkeligt skræmmende hvor mange steder man kan komme ind, bare man kan stave til apostrof.
Avatar billede curriculum Nybegynder
21. oktober 2004 - 19:32 #9
ja pling er en god hacker fidus... ' OR 1=1' :)
Avatar billede curriculum Nybegynder
21. oktober 2004 - 19:34 #10
jeg laver f.eks altid guid check, før databasen kaldes...
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