Właśnie sobie sprawę, że zostały przechwytywanie niewłaściwych danych dla jednej kolumny w mojej tabeli. Rozwiązałem problem, jednak dane, które zdobyłem do tej pory, są nieprawidłowe. NazwaJak zaktualizować dane kolumn przy użyciu innych tabel danych TSQL
Miejmy moje tabele TableIWantToCorrect
i TableWithIDs
W TableIWantToCorrect
, mam klucz obcy do TableWithIDs
. To jest niepoprawne.
Jestem w stanie skorygować dane przez porównanie podciągu kolumny w TableIWantToCorrect
z kolumną w TableWithIDs
.
więc obecnie mam
TableIWantToCorrect
Name ForeignKey
123-abc-123 15
456-def-456 15
789-ghi-789 15
TableWithIDs
CompareName id
abc 1
def 2
ghi 3
Więc chcę zaktualizować TableIWantToCorrect
mieć prawidłową wartość ForeignKey gdy podciąg w Nazwa jest równa podciąganiu w Porównać nazwę. Położenie podciągu jest zawsze takie samo, więc mogę użyć metody Substring
.
Moja próba:
Update TableIWantToCorrect
SET ForeignKey =
(SELECT id
FROM TableWithIDs
WHERE UPPER(CompareName) = UPPER((SUBSTRING(TableIWantToCorrect.Name, 4, 3)))
Rezultat:
Podkwerenda zwrócone więcej niż 1 wartość. Jest to niedozwolone, gdy podkwerenda następuje po, = =,! =, <, < =,>,> = lub gdy podzapytanie jest używane jako wyrażenie. Oświadczenie zostało wypowiedziane.
Wiem, że zrobiłem coś głupiego. Co ja tu zrobiłem niepoprawnie?
swojej inline-zapytania jest zwrócenie więcej niż jeden wiersz stąd ten problem. Uruchomić tę kwerendę, aby dowiedzieć się, które z nich są powtarzane 'SELECT CompareName, count (1) \t OD TableWithIDs GROUP BY CompareName HAVING COUNT (1)> 1 \t ' – Chandu
Czy nadal pojawia się błąd po zmianie podzapytanie do użyć "SELECT DISTINCT id'? Jeśli tak, istnieje wiele możliwych dopasowań i nie jest jednoznaczne, który z nich zastosować. –
możliwy duplikat [UPDATE z SELECT przy użyciu SQL Server] (http://stackoverflow.com/questions/2334712/update-from-select-using-sql-server) –