我想在sql server数据库中上传csv文件。我想在插入....之前一个接一个地上传数据,而不清空表我如何修改代码来实现…
谢谢。
$deleterecords = "TRUNCATE TABLE csvTable"; //empty the table of its current records
$params = array();
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$stmt = sqlsrv_query($conn, $deleterecords, $params, $options );
//$stmt=odbc_exec($conn,$deleterecords);
//Upload File
if (isset($_POST['submit'])) {
if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>";
echo "<h2>Displaying contents:</h2>";
readfile($_FILES['filename']['tmp_name']);
}
//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$import="INSERT into csvTable(Name,city) values('$data[0]','$data[1]')";
$params = array();
$options = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
$stmt = sqlsrv_query($conn, $import, $params, $options );
//$stmt=odbc_exec($conn,$import);
}
fclose($handle);
print "Import done";
我想,这才是真正的问题
现在我想让数据留在表中,下一个插入正好在已经插入到表中的数据下面
SQL-Server表没有任何隐式顺序!
数据…
如果不删除旧数据会发生什么?我是对的,你的实际问题是:我怎么知道哪些记录是新插入的?
- 添加列
ImportID INT IDENTITY
,以确保运行数。如果您在查询中使用ORDER BY ImportID
,您将在旧数据 下面获得新数据 - 添加一个列到你的目标表,并传递一个标记(sessionID, datetime,无论什么),以允许分组以后
- 添加一个
DEFAULT CONSTRAINT
列来设置当前时间,以允许在此上分组(仅当没有并行插入可能!) - 使用staging表首先将值存储在一个空表中(像以前一样),然后使用存储过程(使用任何您喜欢的附加逻辑)将数据移动到实际数据中