代码之家  ›  专栏  ›  技术社区  ›  Joe R.

变量表或列名称

  •  1
  • Joe R.  · 技术社区  · 14 年前

    Informix-SQL或任何其他基于SQL的数据库:

    假设我有一个应用程序,其中取决于某些列的值,例如:

    company.code  char(3) {abc}
    company.branch char(2) {01}
    

    我可以构造表名“abc01”以包含在abc01;的select*中吗? 换句话说,变量表名..同样的问题也适用于列名。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Jonathan Leffler    14 年前

    只有在能够操作字符串和处理动态SQL的语言中。它必须动态地创建语句。

    在查询中只能对值使用占位符,而不能对查询的结构元素(如表名或列名)使用占位符。

        2
  •  2
  •   ksogor    14 年前

    仅当使用动态SQL时。就像在应用程序中构建SQL代码,然后使用类似于execute immediate的代码。

    sprintf(cdb_text1, "create table %s (field1 char(3));", usr_db_id);
    EXEC SQL execute immediate :cdb_text;
    

    如果您使用动态SQL,那么它会因为SQL注入而变得很糟糕。