2012-07-25 13 views
5

W poniższym oświadczeniu, czy f1 zawsze będzie mieć wartość, którą miał kiedyś f2? A może f2 czasami się aktualizuje, a f1 kończy się na NULL? Mam wrażenie, że nowe wartości nie są dostępne w oświadczeniu, że f2 ma starą wartość podczas przetwarzania rekordu, ale nie mogę znaleźć autorytatywnego miejsca, które to mówi.Aktualizacja SQL za pomocą wartości z tego samego rekordu

UPDATE x 
SET 
    x.f1 = x.f2, 
    x.f2 = NULL 

Odpowiedz

3

Konceptualnie operacja dzieje "all at once" więc będzie korzystać z "przed" Wartości

Rzeczywiście

UPDATE x 
SET 
x.f1 = x.f2, 
x.f2 = x.f1 

będzie również działać dobrze, aby zamienić dwie wartości kolumn.

+0

Dzięki! "wszystko na raz" było pojęciem/pojęciem, które musiałem sprawdzić i przeczytać. Twoje zdrowie. –

2

f1 będzie zawsze f2 „s poprzedniej wartości przed UPDATE.

Pod względem technicznym rekord zostanie usunięty i ponownie wstawiony. Tak więc SQL sprawdzi, jaki powinien być nowy rekord, a następnie usunie bieżący rekord, a następnie wstawi nowy rekord.

Ten artykuł dotyczące SQL wyzwalacze mogą pomóc wyjaśnić:

Usunięte tabela przechowuje kopie wierszy podczas usunąć i UPDATE oświadczenia. Podczas wykonywania instrukcji DELETE lub UPDATE wiersze są usuwane z tabeli wyzwalacza i przenoszone do usuniętej tabeli. Usunięte tabele i tabela wyzwalaczy zwykle nie mają wspólnych wierszy.

Wstawiona tabela przechowuje kopie odpowiednich wierszy podczas instrukcji INSERT i UPDATE. Podczas transakcji wstawiania lub aktualizacji nowe wiersze są dodawane do wstawionej tabeli i tabeli wyzwalacza. Wiersze we wstawionej tabeli są kopiami nowych wierszy tabeli wyzwalacza .

http://msdn.microsoft.com/en-us/library/ms191300.aspx

+0

Co znaczy "technicznie rzecz biorąc" rekord zostaje usunięty i ponownie wstawiony? SQL Server może wprowadzać aktualizacje. A TBH po prostu nie widzę tutaj znaczenia wyzwalaczy. –

+0

@MartinSmith Zobacz mój cytowany tekst. Byłem pod wrażeniem podczas aktualizacji rekordów są usuwane i wstawiane? – Curt

+0

Tylko w niektórych okolicznościach. np. jeśli klastrowana kolumna klucza indeksu jest aktualizowana, a więc wiersz musi się przenieść. –

Powiązane problemy