Sql server 从csv更新或插入sql server

Sql server 从csv更新或插入sql server,sql-server,Sql Server,我有一个包含用户信息的CSV文件,比如 first_name;last_name;user_id;full_name 柱分离器为,行终止符为\n 我需要做的是在users表中插入或更新。唯一键是user\u id:如果具有此user\u id的记录已存在,我需要更新,如果不存在,我需要插入 但是,有一些问题阻止我使用ManagementStudio数据导入或批量插入 首先,users表中有更多字段(不仅仅是4个),并且csv文件中的列顺序与表中的列顺序不一致。所以我需要能够指定文件中的哪一列转

我有一个包含用户信息的CSV文件,比如

first_name;last_name;user_id;full_name
柱分离器为
,行终止符为
\n

我需要做的是在
users
表中插入或更新。唯一键是
user\u id
:如果具有此
user\u id
的记录已存在,我需要更新,如果不存在,我需要插入

但是,有一些问题阻止我使用ManagementStudio数据导入或批量插入

首先,
users
表中有更多字段(不仅仅是4个),并且
csv
文件中的列顺序与表中的列顺序不一致。所以我需要能够指定文件中的哪一列转到表中的哪一列

第二,需要填写一些额外的字段。例如,
users.email=users.user\u id
。这是另一个障碍-尽管对于新插入的行
users.email=users.user\u id
,可能
users.email
将来会发生变化,所以我不能只插入
user\u id
,然后运行
update[users]set[email]=[user\u id]
使用fgetcsv

带有两个colonne的示例:

<?php
$row = 0;
$update = "";
//separator of column
$separator = ";";

//creates two variables containing the index columns to read / modify
$idx_nom = 0;
$idx_rubrique = 1;

//Open file writing
if (($handle = fopen("test.csv", "r")) !== FALSE) 
{

   //we travel the file line by line, storing the data in a table
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
    {
       //can not control that the second line if the first contains the column headers
       if ($row != 0)
       {
          //conditions of one column 
          if (stristr($data[$idx_nom], 'chemise'))
          {
             $data[$idx_rubrique] = 1;
          }
           else if (stristr($data[$idx_nom], 'costume'))
          {
             $data[$idx_rubrique] = 2;
          }
           else if (stristr($data[$idx_nom], 'cravate'))
          {
             $data[$idx_rubrique] = 3;
          }
      }

      $update   .= implode($separator,$data)."\r\n";
      $row++;
   }

    fclose($handle);
}

//update from csv
$ouvre=fopen("test.csv","w+");
fwrite($ouvre,$update);
fclose($ouvre);
?>


您是否尝试过使用导入数据向导?听起来您可能需要一个两阶段的过程。您可以做的一件事是将所有数据导入临时表,然后使用新的临时表插入/更新目标表。也看看和articles@Yakyb在导入数据向导中,我无法填写其他字段。或者我可以吗?@huMptyduMpty,我可以使用这里的
#temp
表格吗<代码>从csv批量插入
,然后编写一个脚本,如
如果存在(…其中用户id=…),然后(更新…)否则(插入…
,然后
。\drop temp
。是这样吗?@xaxa:对不起,我的意思不是一个
#temp
。数据库中用于此导入的临时物理表。以后可以删除!