2013-08-06 14 views
7

ho questa SQL:SQL colonna a incremento intero anche se null

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

la vista colonna è nullable. Quindi funziona solo se la colonna ha un valore che non è nullo.

Come posso rendere questa istruzione impostare il valore su 1 se è nullo e incrementare altrimenti?

Grazie.

+1

Il tuo tavolo ha solo una riga? –

+0

No, il resto dell'istruzione include dove id = {id dell'entità} – Richard

risposta

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

Perché la gente insiste a usare il proprietario 'IsNull()' sullo standard, più flessibile e potente 'Coalesce()'? – gvee

+0

: - Isnull è comparativamente più veloce di Coalesce –

+0

@RahulTripathi è possibile fornire un collegamento ad alcune prove di questo per favore? ** EDIT: ** trovato questo da Adam Machanic ... http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/performance-isnull-vs-coalesce.aspx – gvee

5

È possibile utilizzare Isnull anche al posto di Coalesce come Isnull è relativamente più veloce di Coalesce

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

controlla questo link per capire la differenza di prestazioni tra i due: - http://weblogs.sqlteam.com/mladenp/articles/2937.aspx

+0

In realtà avevo scritto le mie scoperte nelle altre risposte. Se lo chiedi, li aggiungerò nella mia risposta. –

+0

Aggiornato la mia risposta. !!!! –

+0

Si prega di fare attenzione alle dichiarazioni generali - ISNULL non è sempre più veloce di COALESCE, e il collegamento che hai indicato ha anche dimostrato che in quel caso specifico, ISNULL era *** *** più lento di COALESCE. –

1

I preferisci le altre due risposte, ma questo potrebbe essere di qualche utilità anche in altre situazioni.

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

Non capisco, questa risposta viene eseguita molto più velocemente di quella accettata, ma non è accettata come la risposta migliore ... – 71GA

Problemi correlati