/ 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
[mssql] fejl i stored procedure til implem~
Fra : Thomas D


Dato : 11-09-03 12:31

Hej,


Har lavet en Store Procedure som ser således ud:

--

EXEC('
SELECT * FROM (
SELECT TOP '+@x+' * FROM (
SELECT TOP '+@x+' * FROM (
SELECT TOP ('+@x+'+'+@y+') '+@SelectList+'
FROM '+@FromTableList+'
ORDER BY '+@OrderBy+' '+@OrderAD+'
) AS foo ORDER BY id DESC
) AS bar
) AS baz ORDER BY id ASC
')

--

Den tager imod følgende parametre:

@SelectList varchar(128) = '*',
@FromTableList varchar(128) = 'ContentHistory',
@OrderBy VarChar(64) = 'id',
@OrderAD VarChar(4) = 'ASC',
@X int = 0,
@Y int = 10


Når jeg kører den i SQL Query Analyzer giver den følgende output:
--
Server: Msg 170, Level 15, State 1, Line 5
Line 5: Incorrect syntax near '('.
Stored Procedure: db.dbo.Get_Pages
Return Code = 0
--

Jeg har så prøvet at fjerne de paranteser, da jeg ikke var klar over om det
var nødvendige.
Altså koden:
--
EXEC('
SELECT * FROM (
SELECT TOP '+@x+' * FROM (
SELECT TOP '+@x+' * FROM (
SELECT TOP '+@x+'+'+@y+' '+@SelectList+'
FROM '+@FromTableList+'
ORDER BY '+@OrderBy+' '+@OrderAD+'
) AS foo ORDER BY id DESC
) AS bar
) AS baz ORDER BY id ASC
')
--

Så giver den outputtet:
--
Server: Msg 156, Level 15, State 1, Line 6
Incorrect syntax near the keyword 'FROM'.
Stored Procedure: db.dbo.Get_Pages
Return Code = 0
--

Hvad er det der er galt?

Jeg har brugt idéen fra
http://troels.arvin.dk/db/rdbms/#select-limit-offset-mssql

Håber I kan hjælpe mig.

På forhånd tak.

Mvh
Thomas



 
 
Jens Gyldenkærne Cla~ (11-09-2003)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 11-09-03 12:53

Thomas D skrev:


> SELECT TOP '+@x+'+'+@y+' '+@SelectList+'

Problemet ligger i linjen herover. Efter variabelerstatninger giver
den fx

   SELECT TOP 10 + 20 *

- og den kan MSSQL ikke fortolke. Parenteser hjælper ikke - du skal
regne værdien af 10 + 20 ud først.

Hvis du laver noget i retning af:

DECLARE @z int

SELECT @z = @x + @y

....

SELECT TOP '+@z+' '+@SelectList+'

- vil det måske virke. Jeg undrer mig lidt over at du ikke har fået
typekonverteringsfejl, men jeg kan have overset noget. Under alle
omstændigheder er det trivielt at lave typecast hvis det er
nødvendigt.
--
Jens Gyldenkærne Clausen
Greenwich nedrig gang: Ny Delhi (GMT +5.5), Badutspring By (GMT
+2), Ny York (GMT 5), Høns (GMT 6), Los Engel (GMT 8)
(Fra <http://www.paris-tours-guides.com/index_danish.shtml>)

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

Månedens bedste
Årets bedste
Sidste års bedste