SQL Server 2012:根据主键

时间:2016-12-01 17:03:52

标签: sql-server csv

所以我在我的数据库中有这个表。我们将其称为users

UserID   UserName   UserDescription
-----------------------------------
1        test1      Test User #1
2        test2      Test User #2
3        test3      Test User #3
4        test4      Test User #4
5        test5      Test User #5

我有这个CSV文件:

1,"Harry Potter"
4,"Hermione Granger"
3,"Ron Weasley"

我想要的是从CSV文件更新表格。这是我正在寻找的结果:

UserID   UserName   UserDescription
-----------------------------------
1        test1      Harry Potter
2        test2      Test User #2
3        test3      Ron Weasley
4        test4      Hermione Granger
5        test5      Test User #5

无需编写程序来执行此操作,是否有办法从CSV文件中完成此类更新?

基本上我想做一些类似于你可以在导入数据向导中做的事情 - 将CSV列映射到各自的数据库列 - 但要让数据库更新任何主键所在的列数据库与CSV文件中的已分配列匹配。

(SQL Server 2012)

2 个答案:

答案 0 :(得分:1)

您可以使用openrowset访问SQL Server中的csv文件。此示例假定您的表和csv文件中具有匹配的列名称。您可以根据需要调整文件名,目录和列名:

update users
    set users.UserDescription = csv.UserDescription
    from users
        inner join openrowset('MSDASQL',
            'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
            'select * from C:\YourCSV.csv') as csv
            on csv.UserID = users.UserID

答案 1 :(得分:0)

我建议采取以下步骤:

  1. 将CSV导入临时表格。

    相关问题的详细信息: Import CSV file into SQL Server

  2. 使用临时表中的数据更新主表。

    相关问题的详细信息: How do I UPDATE from a SELECT in SQL Server?

    代码示例:

    UPDATE users
       SET users.UserDescription = #import.UserDescription
      FROM users 
           INNER JOIN #import ON users.UserID = #import.UserID