2016-12-01 20 views
0

このデータベースはデータベースにあります。それはusersと呼ばれます。SQL Server 2012:主キーに基づいてCSVからデータを更新します

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の)

+1

一時テーブルにロードして結合および更新できませんか? –

+0

@inquisitive_mindなぜこれを回答として投稿しないのですか? –

+0

私は 'OPENROWSET'のファンです(@ ron-smith's anwer参照)。私は一時テーブルにデータをインポートすることをお勧めします。誰かが興味がある場合:[OPENROWSETとBULK Rowset Provider入門](http://itsalljustelectrons.blogspot.com/2016/01/Openrowset-Bulk-Rowset-Provider-Part-2.html) – DMason

答えて

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 
    
+0

これを行う最も簡単な方法であることが判明しました。ありがとう! – fdmillion

1

あなたはSQL ServerでCSVファイルにアクセスするためにopenrowsetを使用することができます。この例では、テーブルと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 
+0

ファイルをSQLサーバーに置く必要はありませんか? SQL Serverを実行するサーバーに任意のCSVファイルを書き込むための書き込みアクセス権がないとします。 – fdmillion

関連する問題