1

是否可以在任何 SQL 方言中对运算符进行参数化?

我希望能够做到以下几点:

if(x == y)
{
     operator = '<=';
}
else
{
     operator = '=';
}

然后在准备好的语句中使用它:

SELECT a FROM b WHERE number :operator 10

我无法在 MySQL 中完成此操作(我正在使用),但我想知道这是否可以在任何方言中完成。

4

3 回答 3

2

不,您不能直接将运算符作为参数,其他示例通过传入代表您选择的代码分支的字符串向您展示了绕过它的方法。

关于 SQL 语句准备,要记住的重要一点是,任何可执行文件都不能被参数化。唯一可以有占位符的是实际值。任何会影响语句编译方式的东西都不能是参数。

于 2012-12-13T14:02:41.897 回答
1

(至少:SQL server)你可以把它作为一个字符串然后

  • 在您的命令中使用“选择案例”

    CASE input_expression WHEN when_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END 搜索到的 CASE 表达式:CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END

    WHERE CASE WHEN @operator='<=' THEN number<=10 ELSE number=10 END

  • 构建动态 SQL

于 2012-12-13T12:28:48.167 回答
1

您可以使参数表示包含数字下方的范围:

if(x == y) {
  less = 1
} else {
  less = 0;
}

在表达式中使用参数:

SELECT a FROM b WHERE (number < 10 and :less = 1) or (number = 10)
于 2012-12-13T12:37:31.063 回答