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

时间:2016-08-29 08:15:10

标签: php sql-server-2012

我想在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";

1 个答案:

答案 0 :(得分:0)

我认为,这是实际问题

  

现在我希望数据保留在表格中,然后下一个插入点就在已经插入表格中的数据之下

SQL-Server表没有任何隐式顺序!

数据 ...

下面没有

如果您不删除旧数据,会发生什么?我是对的,您的实际问题是:我如何知道新插入的记录?

你可能

  • 添加一列ImportID INT IDENTITY,这将确保一个正在运行的号码。如果您在查询中使用ORDER BY ImportID,则会在旧数据下方获得新数据
  • 在目标表中添加一个列并传入一个标记(sessionID,datetime,等等),以便稍后进行分组
  • 添加一个DEFAULT CONSTRAINT的列来设置当前时间以允许对此进行分组(仅当没有可能的并行插入时!)
  • 使用临时表首先将值存储在清空表中(如前所述),并使用存储过程(使用您喜欢的任何其他逻辑)将数据移动到实际数据中。