我检查了一些答案,但无法找到有关如何使用用户通过 CSV 文件上传的自定义元数据(或 CSV 文件中的列)创建 SQL 表的具体细节。www.dabbledb.com 提供的一项功能,例如为自定义信息创建在线数据库。它将是一个基于 Web 的 .NET 应用程序,使用 SQL Server 2005 或 2008 作为后端数据库。
期待您的来信。
谢谢你SA
我最近做了一些非常接近你要求的事情。就我而言,上传到服务器的 CSV 文件中每一行的数据都存储为“blob”。我使用Lumen Works CSV 阅读器来解析上传的 CSV 文件。它具有读取列标题的能力,您可以去除空格并可以读取 SQL 数据库表列。
希望这有助于 indyfromoz
这只是我将如何做到这一点的一个例子(这意味着它可能是错误的和错误的......)
CSV 文件:
Column:ColumnType:size:n, Column:Type:size:n, Column:Type:size:y
C1Data, C2Data, C3Data
伪代码:
StringBuilder sql = new StringBuilder();
sb.append("CREATE TABLE " + someTableName+ "(" + Environment.NewLine);
for(string s in csvlines) {
if(first_line) {
// pull apart our columns
string[] cols = s.Split(new char[] { ',' });
// iterate over the list of columns
for(string col in cols) {
// pull apart the column name, type, size and nullable flag
string[] ci = col.Split(new char[] { ':' });
// add our column name and add the datatype
sb.Append("[" + ci[0] + "]" + " [" + ci[1] + "] ");
// only put a size if value greater than 0
if(ci[2] != "0") {
sb.Append("(" + ci[2] + ") ");
}
// put our NULLABLE flag on NULL columns only
if(ci[3] == "y") {
sb.Append("NULL," + Environment.NewLine);
} else {
sb.Append("NOT NULL," + Environment.NewLine);
}
}
// remember the above has a bug where the last column has a rouge ,
sb.Append(")");
} else {
// create our insert statement and insert as appropriate
}
}
可能很恶心,可能很脏,可能只是做你需要的!
如果您使用的是实体属性值数据库,那么您只需在主属性表中添加新列,链接到实体,然后只需在属性值表中为实体分配值。
但是,如果这没有意义,那么您将需要使用该ALTER TABLE
命令并添加新列,但如果您要动态更改表结构,那么您可能需要考虑 EAV 数据库结构。
我们刚刚编写了一个读取 csv 的 perl 程序,分析每列中的数据,首先尝试相信第一行是列名,然后拼凑出一个 create table 语句和一堆 0f 插入。我们可以从命令环境或 PHP 内部的系统调用中运行它。