python - 在 tsql 和 pyodbc 中参数化 TOP 值
问题描述
我尝试参数化从表中获取的顶部行数。
我试过了
db.cursor.execute(
'''
SELECT TOP ? VALUE FROM mytable
WHERE param = ?
''',
top_value, param
)
它显示了
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]'@P1' 附近的语法不正确。(102) (SQLExecDirectW)")
像下面这样的字符串插值它可以工作。
db.cursor.execute(
f'''
SELECT TOP {top_limit} VALUE FROM mytable
WHERE SITE_SK_FK = ?
''',
param
)
我需要将它作为参数传递,还是字符串插值就足够了?
解决方案
您可以top
通过用括号括起来的值进行参数化:
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 = ?
推荐阅读
- visual-studio-code - 由于 vscode 的 sudo apt update 警告
- flutter - 为什么颤振本地化不能正常工作?
- powerbi - SSAS - 导入时的多维数据集过滤
- javascript - 如何使用 Bootstrap 4 和 JavaScript 将“$”保留在输入字段的占位符内
- ruby-on-rails - 使用捆绑安装时出错:nokogiri 安装错误
- python - 在 pycharm 中如何在此对话框中将单元测试更改为 pytest
- python - 更改日期格式将 mmm-yy 转换为 yyyy/mm/dd
- c# - 如何通过将实体转换为 DTO 来实现 Linq 查询?
- django - 我在 django 中创建了一个 Bio 应用程序。我如何阻止用户创建重复的 Bio 或删除创建 Bio 按钮
- arrays - 如何在bash中将数组作为参数?