在sql server中上传csv文件,不清空数据库中的表


Upload csv files in sql server without emptying the table in the database

我想在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表首先将值存储在一个空表中(像以前一样),然后使用存储过程(使用任何您喜欢的附加逻辑)将数据移动到实际数据中