10

古いデータと新しいデータのマッピングを含むスプレッドシートに従って、一部の列の値を更新する必要がある既存の MSSQL データベースがあります。

スプレッドシートは次のようになります。

       | OLD DATA      | NEW DATA      |
RECORD | A | B | C | D | A | B | C | D |
1      |OLD|OLD|OLD|OLD|NEW|NEW|NEW|NEW|
2      |OLD|OLD|OLD|OLD|NEW|NEW|NEW|NEW|

ABCD はデータベースに関連する列名で、OLD / NEW はデータに関連します。

したがって、各行(約2500行)

各列の OLD に一致するデータベース値を NEW に変更する必要があります

私の現在の考えは、これと同様の方法でそれを行うことです: Excel スプレッドシートから Oracle データベース テーブルを更新する SQL ステートメント

基本的に、Excel に置換ステートメントのリストを作成させますが、これは問題に対処するための恐ろしく複雑な方法のように感じます!

スプレッドシートの各行で SQL サイクルを実行し、すべてのレコードで a=old、b=old2、c=old3、d=old4 をチェックし、それらの値を適切な a=new、b=new2、 c=new3, d=new4?

4

2 に答える 2

15

スプレッドシートの各行をループする必要はありません。OPENROWSETリンクした回答のように、このコマンドを使用して、スプレッドシートデータを一種の一時テーブルにロードできます。次に、そのテーブルに対して通常のUPDATEステートメントを実行できます。

こんな感じになります

UPDATE YourTable
SET YourTable.A = ExcelTable.NewDataA,
    YourTable.B = ExcelTable.NewDataB,
    YourTable.C = ExcelTable.NewDataC,
    YourTable.D = ExcelTable.NewDataD
FROM YourTable
INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',
         'Excel 8.0;Database=C:\foldername\spreadsheetname.xls;',
         'SELECT column1name, column2name, column3name, column4name
          FROM [worksheetname$]') AS ExcelTable
ON YourTable.ID = ExcelTable.ID
WHERE (YourTable.A = ExcelTable.OldDataA
  AND YourTable.B = ExcelTable.OldDataB
  AND YourTable.C = ExcelTable.OldDataC
  AND YourTable.D = ExcelTable.OldDataD)
于 2013-02-11T14:43:23.497 に答える