如何在create table语句中使用变量

时间:2013-10-07 12:24:28

标签: sqlite tcl

我从tcl使用sqllite。为了创建一个表,我使用:

DB eval { CREATE TABLE TableName (Component text NOT NULL, LC int NOT NULL) }

现在这很好但是如果我想使用变量$ TableName而不是固定的表名,我将不得不使用:

DB eval "CREATE TABLE $TableName (Component text NOT NULL, LC int NOT NULL)"

但是我已经在Stackoveflow上的某处读过,一个ALWAYS应该使用大括号来表示DB eval语句(我认为这是出于安全原因)。 那么,使用“”确定还是我应该以某种方式做到不同?

1 个答案:

答案 0 :(得分:3)

SQLite表达式中的表名称不支持作为参数;参数只能用于。你必须使用普通的Tcl变量替换表名,所以应该非常小心不要让用户指定名称(有另一个表来保存用户指定的名称到表名的映射) ;你有一个数据库,你也可以使用它。)

尽量避免将数据定义语句或数据查询语句与表创建混合,并注意您也可以使用:var而不是$var作为要替换的参数名称;当你必须从动态命名的表中查找内容时,这可以使事情变得更容易:

db eval "SELECT component FROM $TableName WHERE LC = :lc" {
    puts "component = $component"
}