我有一个现有的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?
您无需遍历电子表格中的每一行。您可以OPENROWSET像在链接的答案中那样使用命令将电子表格数据加载到某种临时表中。然后,您可以UPDATE对该表运行一个常规语句。
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)