Tips-Tricks-4

Unicità condizionata, NULL e ANSI_NULLS: Soluzioni T-SQL senza trigger

Recentemente mi sono trovato ad affrontare un caso interessante relativo alla gestione di un vincolo UNIQUE con alcune particolarità su una tabella di un database SQL Server. La richiesta è stata quella controllare che i valori inseriti o modificati in una colonna siano unici, permettendo però NULL multipli.

Consideriamo, a titolo di esempio semplificato, lo schema della tabella dbo.EmailTable. La tabella memorizza alcuni attributi di una anagrafica contatti tra cui il Nome, il Cognome e l’Email. L’attributo Email non è obbligatorio ma quando presente deve essere univoco. L’assenza dell’attributo viene gestita con un NULL.

ALTER COLUMN con #sqlcmdcli

Sergio Govoni

Quante volte avete avuto la necessità di modificare il tipo di dato di una colonna da cui dipendono altri oggetti del database SQL Server?

Se avete avuto questa necessità vi sarete scontrati con l’errore numero 5074 che segnala l’impossibilità di modificare tipo di dato e proprietà di una colonna a causa della presenza di oggetti collegati come Indici, Vincoli di univocità, Statistiche, ecc..

Troverete decine di post in rete che descrivono il problema ma pochi che forniscono una soluzione diversa da quella che prevede l’eliminazione manuale degli oggetti collegati prima di eseguire il comando ALTER COLUMN. Agendo in questo modo, dopo aver applicato le modifiche alla colonna sarà necessario ricreare gli oggetti collegati.

Trigger su SQL Server: Utili o dannosi?

Sergio Govoni

I trigger sono spesso motivo di discordia tra sviluppatori e DBA, tra chi personalizza una soluzione standard e chi la fornisce, tra clienti e software vendor. Sono spesso i primi imputati quando le performance dell’istanza SQL Server o del database degradano. Sembrano facili da scrivere, ma scrivere trigger efficienti non è affatto semplice e quando la loro complessità aumenta, talvolta possono presentare effetti collaterali in grado di confondere persino l’autore.