2013-08-06 12 views
7

Ich habe diese SQL:SQL Schritt Integer-Spalte auch wenn null

update entity_table set views = views + 1 where id = {id of entity} 

die Ansichten Spalte NULL-Werte zulässt. Dies funktioniert nur, wenn die Spalte einen Wert hat, der nicht null ist.

Wie kann ich diese Anweisung den Wert auf 1 setzen, wenn es Null ist und andernfalls erhöhen?

Danke.

+1

Hat Ihr Tisch nur eine Zeile? –

+0

Es tut mir leid, der Rest der Aussage enthält, wo ID = {ID der Entität} – Richard

Antwort

13
UPDATE entity_table 
SET views = Coalesce(views, 0) + 1 
+0

Warum bestehen die Leute auf die Verwendung der proprietären 'IsNull()' über den Standard, flexibler und mächtiger 'Coalesce()'? – gvee

+0

: - Isnull ist vergleichsweise schneller als Coalesce –

+0

@RahulTripathi können Sie einen Link zu einigen Beweisen dafür bitte? ** EDIT: ** gefunden von Adam Machanic ... http://sqlblog.com/blogs/adam_mechanic/archive/2006/07/12/performance-isnull-vs-coalesce.aspx – gvee

5

Sie können Isnull verwenden auch anstelle von Coalesce als Isnull ist vergleichsweise schneller als Coalesce

UPDATE entity_table 
SET views = isnull(views, 0) +1 

prüfen diesem Link für das Verständnis der Performance-Unterschied zwischen den beiden: - http://weblogs.sqlteam.com/mladenp/articles/2937.aspx

+0

Sir, eigentlich hatte ich meine Erkenntnisse in den anderen Antworten geschrieben. Wenn Sie fragen, werde ich sie in meiner Antwort hinzufügen. –

+0

Meine Antwort aktualisiert. !!!! –

+0

Bitte seien Sie vorsichtig bei pauschalen Aussagen - ISNULL ist nicht immer schneller als COALESCE, und der Link, auf den Sie hingewiesen haben, zeigte sogar, dass ISNULL in diesem speziellen Fall *** langsamer war als COALESCE. –

1

I bevorzugen Sie die anderen beiden Antworten, aber das kann Ihnen auch in anderen Situationen von Nutzen sein.

update entity_table 
set views = CASE 
       WHEN views IS NULL THEN 1 
       ELSE views + 1 
      END 
+0

Ich verstehe nicht, diese Antwort führt viel schneller als akzeptiert, wird aber nicht als die beste Antwort akzeptiert ... – 71GA

Verwandte Themen