Posts

Showing posts from August, 2019

SET IDENTITY_INSERT, a cosa serve?

Image
Ciao a tutti, ..e ben ritrovati. Mi fa piacere che questi post, a volte brevi, a volte più lunghi siano apprezzati! Per questo vi dico un grazie di Cuore. Quello che cerco di fare è di essere sempre il più chiaro possibile. Quindi qual'ora non lo fossi ditemelo pure.. consigli e critiche costruttive sono sempre un regalo. Buona lettura! Oggi breve articolo sul comando T-SQL SET IDENTITY_INSERT <NOMETABELLA> ON/OFF   Il comando SET IDENTITY_INSERT Diciamo subito a che cosa serve. Supponiamo di avere una tabella <NOMETABELLA> in cui è definito un campo di tipo identità come ad esempio il campo ID nell'esempio sotto:   CREATE TABLE ELENCOTELEFONICO (ID INT IDENTITY (1,1), CODICE VARCHAR(40) ) Per inserire i dati nella tabella non andrò a specificare un valore per campo ID. Tale valore sarà infatti generato in automatico: INSERT INTO <NOMETABELLA> (CODICE) VALUES ( 'AAA' ) Tramite il comando SET IDENTITY INSER...

Trigger e la funzione UPDATE()

Image
Ciao a tutti!   Oggi parliamo di trigger e più nello specifico della funzione UPDATE() e più in generale di come ottimizzare questi automatismi che SQL Server mette a disposizione. Partiamo dalla funzione UPDATE () per parlare delle metatabelle INSERTED e DELETED . Buona lettura!   La funzione UPDATE()   Già, ma che cos’è la funzione UPDATE()? La funzione UPDATE(NOMECOLONNA) , che si utilizza dentro ad un trigger restituisce l’informazione relativa al fatto che il valore della campo NOMECOLONNA abbia cambiato o meno valore. Vediamo un esempio creandoci due semplici tabelle uguali tra di loro CREATE table TABELLA_A (id int identity (1,1), CODICE VarChar (40), DESCR VarChar (40)) CREATE table TABELLA_B (id int identity (1,1), CODICE VarChar (40), DESCR VarChar (40)) Adesso creiamo un trigger in update sulla tabella_A per ottenere questo comportamento: Se cambia il codice nella tabelle_A allora cambierà il codice nella tabella_B CREATE TRI...

Di sottoquery ed ottimizzazioni (parte 2)

Image
Ciao a tutti, Siete pronti per la seconda parte? Nell'articolo di ieri (clikka qui: Di sottoquery ed ottimizzazioni (parte 1)   ) avevamo parlato di Sottoquery. Abbiamo visto cosa comportano e che per quanto possibile è bene evitarle . Già, ma come fare? Lo vediamo adesso!  P.S. Buona lettura!   Di sottoquery ed ottimizzazioni parte 2 Partiamo innanzitutto dalla stringa SQL che avevamo analizzato: SELECT Tes.ID, Tes.DataOrdine, ( SELECT MAX(Det.Prezzo) FROM Dettaglio AS Det WHERE Tes.Id = Det.Idtestata) AS MaxPrezzo, ( SELECT MAX(Det.Prezzo2) FROM Dettaglio AS Det WHERE Tes.Id = Det.Idtestata) AS MaxPrezzo2, ( SELECT MAX(Det.Prezzo3) FROM Dettaglio AS Det WHERE Tes.Id = Det.Idtestata) AS MaxPrezzo3, ( SELECT MAX(Det.Prezzo4) FROM Dettaglio AS Det WHERE Tes.Id = Det.Idtestata) AS MaxPrezzo4 FROM Testata AS Tes Abbiamo capito, dal piano di esecuzione effettivo che la lettura della tabella Dettaglio viene eseguita 4 volte. Abbiam...

Di sottoquery ed ottimizzazioni (parte 1)

Image
Buongiorno a tutti, ben ritrovati. Grazie per le tante visite (ben 1200 in circa un mese e mezzo sono tante per un technical-blog appena nato), mi raccomando continuate così! Grazie ancor di più per gli apprezzamenti che fanno sempre molto piacere. Ho cercato di rendere il blog più leggibile, ho aggiunto i post più popolari e infine ho inserito anche la possibilità di ricevere una notifica via mail alla pubblicazione un nuovo articolo. Se la trovate una buona idea allora iscrivetevi e riceverete i nuovi articoli appena sfornati ...ancora caldi! Lasciate le ferie alle spalle partiamo oggi parlando di "uno degli argomenti core" di questo blog ovvero la scrittura ottimale e performante delle Query. Lo vorrei fare assieme a voi analizzando come vengono gestite in SQL Server le sottoquery (subquery in inglese).   Le SottoQuery Partiamo da un esempio. Tante volte osserviamo delle interrogazioni che hanno al loro interno altre Query. Può avvenire sia nella select che ...

Le Common Table Expression (CTE) che cosa sono?

Image
Buongiorno a tutti! Ben ritrovati! Oggi parliamo di Common Table Expression a cui molto più spesso ci si riferisce con l'acronimo CTE . Cosa sono? Cercherò di spiegarlo nel modo più semplice possibile! Pronti? Via!   Le Common Table Expression Quando mi fanno questa domanda rispondo utilizzando il modo più semplice in cui riesco a definirle: Una CTE è un Result set temporaneo a cui associamo un nome ed al quale possiamo riferirci nei vari statements. Le CTE sono state introdotte ormai un po' di anni fa con il rilascio della versione 2005 di SQL Server ma s e non sapete quale versione è installata potete vedere qui: identificare la versione di sql server installata L'obbiettivo era quello di prevedere una sintassi estesa che permettesse di scrivere le Query in modo più agevole. Il loro utilizzo potrebbe inoltre portare ad un incremento delle prestazioni ma questo aspetto lo vedremo in futuro. La sintassi base per l'utilizzo delle CTE è davvero semplice ...