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

如何有条件地为SQL create table语句构造表名?

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

    在SQL存储过程中,我希望能够构造一个表名并创建它。

    示例:我刚登录到公司03下的数据库,但客户表不存在,因此我希望proc CREATE TABLE CUSTOMER03 .

    有办法去吗 append company_id char(2) CUSTOMER 把它喂给 CREATE TABLE 声明?也许像

    CREATE TABLE $tablename or $tablename+company_id?
    
    3 回复  |  直到 11 年前
        1
  •  2
  •   Kevin Stricker    14 年前

    您需要使用动态SQL,例如:

    DECLARE @company_id char(2)
    SET @company_id = '02'
    EXEC('CREATE TABLE CUSTOMER' + @company_id + ' (id int PRIMARY KEY)')
    

    (已测试)

        2
  •  9
  •   Gary Myers    11 年前

    在Oracle中,语法如下

    BEGIN
      EXECUTE IMMEDIATE 'CREATE TABLE CUSTOMER_'||v_company_id||' (..)';
    END;
    

    然而,这可能是一个非常糟糕的主意。接下来的六个月,您将要向表中添加一列,并且需要计算出需要将它添加到哪些表中。

    另外,Oracle中的存储过程需要一个固定的表名(现有表的名称),或者您必须通过动态SQL引用所有内容,这是一个难题。

    最好有一个以公司ID为属性的客户表。然后使用 Fine Grained Access Control 安全过滤公司ID以控制谁查看公司的数据。

        3
  •  2
  •   Zack Bloom    11 年前

    使用 IF NOT EXISTS 对的修饰符 CREATE TABLE 声明。这将导致仅当表不存在时才创建该表。