2013-02-11 12 views
8

Mam istniejącą bazę danych MSSQL, w której wartości w niektórych kolumnach wymagają aktualizacji zgodnie z arkuszem kalkulacyjnym, który zawiera odwzorowania starych danych i nowych danych.Zaktualizuj istniejące wartości bazy danych z arkusza kalkulacyjnego

Arkusz jest tak:

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

Gdzie ABCD są nazwy kolumn, które odnoszą się do bazy danych, a OLD/NEW dotyczy danych.

Zatem dla każdej linii (około 2500 wierszy)

Wartości baz danych pasujących OLD w każdej kolumnie, muszą być zmienione do nowych

Moje obecne myśli to zrobić w sposób podobny do tego : SQL Statement that Updates an Oracle Database Table from an Excel Spreadsheet

Zasadniczo coraz Excel sformułować listę zastąpić oświadczenia, choć czuje się jak strasznie pokrętny sposób na radzenie sobie z tym problemem!

Czy istnieje sposób na wykonanie cyklu SQL w każdym wierszu arkusza, sprawdź wszystkie rekordy dla a = stary, b = stary2, c = stary3, d = stary4, a następnie zamień te wartości na odpowiednie a = nowe, b = new2, c = new3, d = new4?

+0

Można zmienić format pliku excel, dając niepowtarzalne nagłówków kolumn na każdej kolumnie (czyli nagrywania Olda, Oldb, Newa, newb)? – sgeddes

+0

Tak - plik Excela można swobodnie modyfikować. – sbozzie

+0

Odpowiedź Jeffa poniżej brzmiała dokładnie tak, jak myślałem, zakładając, że możesz zmienić nazwy kolumn. Daj nam znać, jeśli masz z tym problemy. Powodzenia. – sgeddes

Odpowiedz

11

Nie powinieneś przepuszczać każdego wiersza w arkuszu kalkulacyjnym. Możesz użyć polecenia OPENROWSET, podobnie jak w odpowiedzi, do której jesteś podłączony, aby załadować dane arkusza kalkulacyjnego do tabeli tymczasowej. Następnie możesz uruchomić regularne oświadczenie UPDATE przeciwko tej tabeli.

To mogłoby wyglądać podobnie jak ten

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

Woo! to działało naprawdę dobrze, dziękuję :) Zająłem się trochę błahostkami, aby uzyskać nazwy kolumn toczących się (dodatkowa kolumna danych została dodana w nowych danych), ale teraz wiem o Excelu -> SQL! – sbozzie

Powiązane problemy