SQL查询的哪些部分可以参数化?

时间:2017-06-01 19:16:24

标签: sql

例如,通常允许这样做:

sql.execute("select * from some_table where some_column=@parameter", parameter=5);

但不是这样:

sql.execute("select * from @which_table where some_column=5", which_table="some_table");

未测试所有可能的组合......是这样的:

sql.execute("select @which_column from some_table", which_column="some_column");

或者这个:

sql.execute("select some_column*@multiplier from some_table", multipler=5);

或者....

确定查询的某些部分是否可参数化的一般规则是什么?为什么?

(我意识到对于不同语言的不同数据库引擎和适配器,这可能有不同的答案,但我注意到有一般趋势)

2 个答案:

答案 0 :(得分:3)

标识符和关键字不可参数化。这包括:

  • 列名称
  • 表名
  • 架构名称
  • 数据库名称
  • 功能名称
  • 关键字

基本思想是编译查询,编译版本有参数。当缺少任何上述元素时,无法编译查询。

答案 1 :(得分:0)

您可以在查询中对任何内容进行参数化,但不能在运行时参数化。如果您设置如下: @sql ='选择' + @column +'来自' + @table +' '

EXEC(@sql)

您可以参数化所有内容

因此,您需要先创建sql语句,然后再执行它。这就是我通常这样做的方式。

希望有所帮助