admin

从电子表格更新现有数据库值

sql

我有一个现有的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制定替换语句列表,尽管这似乎是解决问题的令人费解的方法!

有没有一种方法可以使电子表格的每一行都有SQL循环,请检查所有记录是否为a = old,b = old2,c = old3,d =
old4,然后将这些值替换为适当的a = new,b = new2, c = new3,d = new4?


阅读 190

收藏
2021-05-10

共1个答案

admin

您无需遍历电子表格中的每一行。您可以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)
2021-05-10