从CFDBINFO标记返回的内容创建mysql表所需的代码指南

时间:2014-03-24 10:18:43

标签: mysql coldfusion

使用以下代码..

我一直试着从cfdbinfo创建mysql表,我在这里遗漏了一些东西:

  1. 唯一键
  2. 索引键
  3. 以下是我的尝试,请提供您的改进

    <cffunction access="public" name="advancedbackup" returntype="any">
      <cfargument name="structform" default="" required="no" type="struct">
      <cfset var myStruct = "">
      <cfset getInfo = getBackupDatabaseTables('szone')>
      <cfset getTableEngines = valueList(getInfo.name)>
      <cfdbinfo datasource="supportzone" name="getColumns" type="columns" table="#ListLast(arguments.structform.ID,'~')#" />
      <cfsavecontent variable="tableName">
      CREATE TABLE `<cfoutput>#ListLast(arguments.structform.ID,'~')#</cfoutput>`(
      </cfsavecontent>
      <cfsavecontent variable="tableContents">
      <cfloop query="getColumns">
        <CFOUTPUT> `#COLUMN_NAME#` 
          <cfif COLUMN_SIZE GT 255 AND TYPE_NAME NEQ 'varchar'>
            text
            <cfelseif TYPE_NAME IS 'datetime'>
            datetime
            <cfelseif TYPE_NAME IS 'timestamp'>
            timestamp
            <cfelse>
            #TYPE_NAME#(#COLUMN_SIZE#) 
          </cfif>
          <cfif IS_PRIMARYKEY IS 'Yes'>
            AUTO_INCREMENT
          </cfif>
          ,
          <cfif IS_PRIMARYKEY IS 'No'>
            DEFAULT
            <cfif COLUMN_DEFAULT_VALUE IS ''>
              NULL,
              <cfelse>
              '#COLUMN_DEFAULT_VALUE#'
              <cfif IS_NULLABLE IS 'No'>
                NOT NULL,
                <cfelse>
                NULL,
              </cfif>
            </cfif>
          </cfif>
        </CFOUTPUT>
      </cfloop>
      <cfoutput> PRIMARY KEY (`
        <cfif getColumns.IS_PRIMARYKEY IS 'Yes'>
          #getColumns.COLUMN_NAME#
        </cfif>
        `)
        ) ENGINE =
        <cfif ListFindNoCase(getTableEngines,ListLast(arguments.structform.ID,'~'),',') NEQ 0>
          #getInfo.Engine# AUTO_INCREMENT=#getInfo.AUTO_INCREMENT#
        </cfif>
        ; </cfoutput>
      </cfsavecontent>
      <cfset fTable = tableName & tableContents>
      <cfdump var="#ftable#" abort>
    

    基本上,getBackupDatabaseTables正在获得以下查询

    SHOW TABLE STATUS 
            from szone
    

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试将现有表的结构复制到新表。我会在你的数据库中创建一个模板表,比如backup_tbl_tmp。它可以包含您需要的所有键和索引。然后创建一个新表(在我假设你使用的MySQL中......)就是这样做:

CREATE TABLE new_table_name LIKE backup_tbl_tmp;

对于MSSQL使用:

SELECT * INTO new_table_name FROM backup_tbl WHERE 0=1;

请注意,在MSSQL中,不会复制索引。如果要将数据复制到新表中,请删除WHERE子句。