使用以下代码..
我一直试着从cfdbinfo创建mysql表,我在这里遗漏了一些东西:
以下是我的尝试,请提供您的改进
<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
答案 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子句。