I try to parametrize number of top rows to get from table.
I tried it with
db.cursor.execute(
\'\'\'
SELECT TOP ? VALUE FROM mytable
You can use string formatting for the TOP (and a proper parameter for the WHERE) provided that top_limit
is an int
so there is very little danger of SQL Injection issues.
You can parameterize top
by surrounding the value with parenthesis:
DECLARE @Top int = 5;
With Tally(N) AS
(
SELECT ROW_NUMBER() OVER(ORDER BY @@SPID)
FROM sys.objects
)
-- This works just fine
SELECT TOP (@Top) N
FROM Tally;
-- This will raise an error: Incorrect syntax near '@Top'
SELECT TOP @Top N
FROM Tally;
Applied to the code you've posted:
SELECT TOP (?) VALUE
FROM mytable
WHERE param = ?