您好,JMP社区,
我在这里寻求您的帮助,因为我在其他帖子中没有找到适合自己的解决方案。它是关于将数据表的内容写入数据库的表中。
为此我编写了这个小函数:
myInsertInto = function({dt, dbConnection, destinationName},
cols = dt << GetColumnNames(String);
rows = dt << Select All Rows << GetSelectedRows;
show(cols, rows);
//prepare sql head
sqlHead = "Insert Into " || destinationName || " (";
for each({col, index}, cols,
if(index == Length(cols),
sqlHead = sqlHead || col ||")",
sqlHead = sqlHead || col ||",";
)
);
//prepare sql body
sqlBody = "Values\!n";
ForEach({row, index}, rows,
sqlBody = sqlBody || "(";
show(row);
values = dt[row,0];
show(values);
for each({val, index}, values,
if(type(val) == "String",
if(IsMissing(val),
tmpVal = "null",
tmpVal = "'"||val||"'"
)
,
if(IsMissing(val),
tmpVal = "null",
tmpVal = char(val)
)
);
if(index == Length(values),
sqlBody = sqlBody || tmpVal ||")",
sqlBody = sqlBody || tmpVal ||",";
)
);
if(index == Length(rows),
sqlBody = sqlBody || ";",
sqlBody = sqlBody || ",\!n"
);
);
sqlQurey = sqlHead || "\!n" || sqlBody;
New SQL Query(
Version( 130 ),
Connection( myDbHandle ),
QueryName( "messwert.test_struktur_dennis" ),
Custom SQL(
Substitute(sqlQurey,"\!n", "", "\!t", "")
)
)<< run;
return(sqlQurey)
);该函数可以完成它应该完成的工作,但有一些我不知道如何解决的限制。例如,我们使用的 postgresql 数据库,其中的表包含时间戳、日期或其他格式化的列。我不知道如何将其包含到我的函数中,因为 JMP 将所有这些格式化类型视为数字。
另一个问题是处理数据重复。使用我的函数,数据表的内容将被盲目地插入到我们的数据库中。这可能会导致重复,因为我不知道那里已经有什么。我在另一篇文章中发现了这个函数:
dt << 保存数据库( dbc,
“dbo.fake”,
代替
(英文):
不幸的是,那样会取代我的整个桌子,而我无法使用它。
因此我想向社区寻求帮助。有人知道可以解决这些问题的插件或脚本解决方案吗?