【问题标题】:SQL Procedure - Using a parameter as an operatorSQL 过程 - 使用参数作为运算符
【发布时间】:2012-07-31 13:17:15
【问题描述】:

我有一个程序,我试图根据高于规定参数的度量值来选择结果。但是,我希望大于可以更改为等于或小于。

我尝试用 > 代替参数,但它给了我错误: sql 语法错误:“PARAM_OP”附近的语法不正确(其中 PARAM_OP 是应替换为操作符的参数的名称。

欢迎任何想法。

代码如下:

var_out = 
SELECT
    "Col1" AS "Col1",
    "Col2" AS "Col2",
    "Col3" AS "Col3",
    SUM(Col4) AS "Col4"

FROM <schema>.<view>
WHERE "Col2" = PARAM_1
GROUP BY Col1, Col2, Col3
HAVING SUM(Col4) > PARAM_2
ORDER BY SUM(Col4);

【问题讨论】:

  • param_op 在这段代码中的位置?
  • 您的其中一行是否显示:HAVING SUM(Col4) PARAM_OP PARAM_2 如果是这样,您可能想要使用动态 SQL。
  • 您不能将参数用于 SQL 语句的结构部分 - 因此不能用于任何关键字、运算符或标识符。参数只能出现在您期望值表达式的位置。 IOW 参数是在查询时间之前绑定到“真实”值的值的占位符。解决方案是在您的应用程序代码中生成 SQL 语句,并执行该生成的语句。另见stackoverflow.com/questions/11518315/…
  • Paddy - PARAM_OP 将替换 > 运算符。
  • Aushin - 这将如何在动态 SQL 中创建? Roland / Holder - 我使用的是 Hana 数据库,所以我宁愿让所有代码生成服务器端来利用处理能力。

标签: sql parameters equals operator-keyword procedural


【解决方案1】:

我在想象类似的东西。

DECLARE @Code VARCHAR(MAX)
SELECT @Code = 
'
var_out = 
SELECT
    "Col1" AS "Col1",
    "Col2" AS "Col2",
    "Col3" AS "Col3",
    SUM(Col4) AS "Col4"
FROM <schema>.<view>
WHERE "Col2" = ' + PARAM_1 + 
'GROUP BY Col1, Col2, Col3
HAVING SUM(Col4) ' + PARAM_OP + ' ' + PARAM_2 
+ 'ORDER BY SUM(Col4);'


EXEC sp_executesql @Code

因此,您构建了一个看起来像您想要执行的 SQL 的字符串,然后使用您的 RDBMS 提供的任何方式运行 SQL 字符串。在 MSSQL 中,应该是 sp_executesql

【讨论】:

    猜你喜欢
    • 2015-06-18
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多