In questi giorni si è aperta una campagna a livello mondiale per chiedere a Microsoft di aggiungere una feature che senza alcun dubbio tutti coloro che hanno lavorato con SQL Server hanno desiderato di avere.
Immaginate di avere una tabella nella quale state facendo delle operazioni DML (INSERT / UPDATE / DELETE) in modo set-based (quindi senza uso di cursori). Se state cercando, ad esempio, di aggiornare 10000 righe ed una di queste contiene una violazione di un qualche vincolo posto sulla tabella, l’intero batch fallirà. Tutto corretto, ma il problema è: qual’è la riga o le righe che hanno dato un errore?
Non sarebbe bello poter estendere, ad esempio, la clausola OUTPUT per avere accesso alle righe che hanno sollevato l’errore? In questo modo l’operazione potrebbe andare avanti scartando solo le righe con errori, rendendole però disponibili in una tabella virtuale, ad esempio ERRORS cosi che possano essere identificate e corrette o gestite altrimenti. Ecco un esempio:
MERGE dbo.destTable tgt USING dbo.srcTable src ON trgt.id = src.id WHEN MATCHED THEN [...] WHEN NOT MATCHED THEN [...] OUTPUT inserted.* INTO @tblModified [...] OUTPUT ERRORS errors.* INTO @tblErrors
Bene. Microsoft, su richiesta dell’aggiunto di questa feature, ha detto che questo scenario non è “abbastanza comune”. L’intera comunità degli sviluppatori si è quindi mobilitata per mostrare che questa feature, al contrario, sarebbe di uso molto comune, andando quindi a far cambiare idea a Microsoft.
Se volete partecipare a questa campagna, e ve lo consiglio vivamente, votate a favore di questo item su Connect: