Lo faccio sempre quando pubblico qui o su StackOverflow perché per WITH
- poiché la parola chiave è sovraccarica - il comando precedente richiede un punto e virgola che termina. Se incollo un esempio di codice che utilizza un CTE, inevitabilmente alcuni utenti lo incolleranno nel loro codice esistente e l'istruzione precedente non avrà il punto e virgola. Quindi il codice si rompe e ricevo lamentele come:
Il tuo codice si è rotto! Ho ricevuto questo messaggio di errore:
Incorrect syntax near 'WITH'
...
Mentre mi piacerebbe credere che le persone stiano migliorando nel porre sempre fine alle loro dichiarazioni con un punto e virgola , preferirei anticipare il rumore e includerlo sempre. Ad alcune persone non piace, ma <shrug />
. Puoi includere tutti i punti e virgola prima o dopo un'istruzione valida che desideri. Questo è valido:
;;;;SELECT 1;;;;;;;;;;;;SELECT 2;;;;;;;;SELECT 3;;;;;
Quindi non vi è alcun danno nel fatto che ci sia un punto e virgola in più che precede un'affermazione che per definizione lo richiede. È più sicuro farlo anche se non è così carino.
Deve essere formulato in modo strano per ottenere il punto, ma "non terminare un'istruzione valida con un punto e virgola" è in realtà deprecato da SQL Server 2008. Quindi, come descrivo nel post del blog, mi collego a sopra, anche nei casi in cui non è necessario bypassare un errore, dovrebbe essere usato ovunque valido. Puoi vederlo qui:
http://msdn.microsoft.com/en-us/library/ms143729.aspx
(Cerca "semi-colon" nell'ultima pagina)
Ovviamente non sarebbe SQL Server se non ci fossero eccezioni. Prova questo:
BEGIN TRY;
SELECT 1/1;
END TRY;
BEGIN CATCH;
SELECT 1/1;
END CATCH;
Non è l'unica eccezione alla regola, ma è quella che trovo più poco intuitiva.