在 tsql 和 pyodbc 中参数化 TOP 值 [英] Parametrizing TOP value in tsql and pyodbc

查看:58
本文介绍了在 tsql 和 pyodbc 中参数化 TOP 值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试参数化要从表中获取的顶行数.

I try to parametrize number of top rows to get from table.

我用

db.cursor.execute(
        '''
        SELECT TOP ? VALUE FROM mytable 
        WHERE param = ? 
        ''',
        top_value, param
    )

它显示了

pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC 驱动程序 17对于 SQL Server][SQL Server]'@P1' 附近的语法不正确.(102)(SQLExecDirectW)")

pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near '@P1'. (102) (SQLExecDirectW)")

像下面这样的字符串插值可以工作.

with string interpolation like bellow it works.

    db.cursor.execute(
        f'''
        SELECT TOP {top_limit} VALUE FROM mytable 
        WHERE SITE_SK_FK = ? 
        ''',
        param
    )

我需要将它作为参数传递,还是字符串插值就足够了?

Do I need to pass it as parameter, or string interpolation is good enough?

推荐答案

您可以通过用括号将值括起来来参数化 top:

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;

应用于您发布的代码:

SELECT TOP (?) VALUE 
FROM mytable 
WHERE param = ? 

这篇关于在 tsql 和 pyodbc 中参数化 TOP 值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆