2012-06-04 9 views
6

Czy aktualizacja SQL będzie rekordem, jeśli nie będzie żadnych zmian w rekordzie?Czy aktualizacja SQL będzie rekordem, jeśli nowe wartości są takie same?

Dla examople, jest to bardziej wydajne, aby zastąpić

UPDATE TABLE myTable 
Set Col1 = ISNULL(Col1,'') 
... 
Set Col100 = ISNULL(Col30,'') 

z

UPDATE TABLE myTable 
Set Col1 = ISNULL(Col1,'') 
... 
Set Col100 = ISNULL(Col30,'') 
WHERE 
Col1 IS NULL OR 
... 
Col30 IS NULL 
+1

Tak. T-SQL nie próbuje ustalić, czy wartości kolumn zostały zmienione. Jeśli określisz wiersz, który ma zostać zaktualizowany w instrukcji 'UPDATE', ** zostanie ** zaktualizowany - niezależnie od tego, czy jest potrzebny czy nie. Jeśli nie jest to potrzebne w pierwszej kolejności - wtedy ** nie wkładaj tego do swojej instrukcji SQL –

+0

Tak, zaktualizuje tabelę. Bardziej efektywne jest inne pytanie. Pamiętaj, że wyzwalacze nie zostaną uruchomione, jeśli aktualizacja nie zostanie wykonana, np. w twoim drugim przykładzie. To może być dobre lub złe w zależności od twojego zamiaru. – HABO

Odpowiedz

5

Tak, będzie to próba nadpisania.

+0

Tak myślałem. thx – ChadD

+1

Nie sądzę, że jakakolwiek baza danych zoptymalizuje aktualizacje. Zapobiegłoby wyzwalaniu wyzwalaczy aktualizacji. –

+0

@Gordon: MySQL tak robi. –

1

Musisz kontrolować to ręcznie, w klauzuli where możesz umieścić wszystkie pola, jeśli różnią się one nowymi wartościami, a gdzie id twojej tabeli jest równy twojemu parametrowi, zapewnisz, że tylko zmodyfikowane rekordy będą być na bieżąco.

UPDATE table 
    SET field1 = @field1, 
       field2 = @field2 
    WHERE field1 != @field1 AND 
      field2 != @field2 AND 
      id = @id 
Powiązane problemy