T-Sql

Using the Static Relational Interval Tree with time intervals

Gianluca Hotz

Per chi come me è appassionato di database temporali, segnalo l’uscita della terza parte di una serie di articoli di Laurent Martin che spiegano come implementare e usare gli RI-Tree in T-SQL con intervalli temporali.

RI-Tree è la contrazione di “Relational Interval Tree” una struttura che permette di fare query su intervalli di valori in maniera efficiente, per chi non ha letto nulla a riguardo consiglio la lettura di tutti e tre gli articoli che introducono la struttura e danno ulteriori riferimenti per approfondire:

MSDN Italia: Come usare lo Statement MERGE (T-SQL)

Sergio Govoni

Il comando MERGE (T-SQL) può essere utilizzato in ambienti OLTP, ma anche OLAP. In uno scenario transazionale, possiamo utilizzarlo per eseguire il Merge dei dati da una sorgente esterna ad una tabella esistente. In un data werehouse, il comando MERGE può essere utilizzato per eseguire UPDATE incrementali oppure per processare slowly changing dimensions…

Leggi l’articolo completo su MSDN Italia a questo link:

http://msdn.microsoft.com/it-it/library/jj973188

Free eBook - SQL Server Execution Plans (2nd Edition)

Sergio Govoni

Dal portale redgate è possibile scaricare, gratuitamente (in formato PDF),  la seconda edizione dell’eBook: SQL Server Execution Plans di Grant Fritchey. Il libro in formato cartaceo è ovviamente acquistabile su Amazon.

Riporto di seguito la prefazione seguita dall’elenco dei capitoli.

Editorial Review

Every day, out in the various online forums devoted to SQL Server, and on Twitter, the same types of questions come up repeatedly: Why is this query running slowly? Why is SQL Server ignoring my index? Why does this query run quickly sometimes and slowly at others? My response is the same in each case: have you looked at the execution plan?

Calcolo della cifra di controllo di un codice EAN/UCC (versione 2.0)

Sergio Govoni

Qualche tempo fa, in questo articolo, abbiamo analizzato l’algoritmo di calcolo della cifra di controllo di un codice UCC/EAN, chi si occupa di logistica conoscerà bene l’argomento.

Lo standard di codifica UCC/EAN richiede che ogni codice generato termini con una cifra compresa tra zero (0) e nove (9), chiamata cifra di controllo (dall’inglese check digit). Questa cifra è calcolata in funzione delle altre cifre che compongono il codice e ha lo scopo di garantire che il codice, stampato in formato barcode, sia interpretato correttamente dal lettore ottico.

Insert Or update (aka Replace or Upsert)

Davide Mauri

Una delle necessità tipica degli sviluppatori è quella di inserire una riga oppure aggiornarne i valori se la riga è già presente. MySQL supporta il comando REPLACE:

http://dev.mysql.com/doc/refman/5.0/en/replace.html

oppure l’opzione INSERT . ON DUPLICATE KEY UPDATE:

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Con SQL Server si può ottenre lo stesso funzionamento, in modo più standard, usando il comando MERGE ed i Row Constructors.

Partendo da questo esempio:

CREATE TABLE dbo.MyTargetTable 
( 
    id INT NOT NULL PRIMARY KEY IDENTITY, 
    alternate_key VARCHAR(50) UNIQUE, 
    col_1 INT, 
    col_2 INT, 
    col_3 INT, 
    col_4 INT, 
    col_5 INT 
) 
GO

INSERT [dbo].[MyTargetTable] VALUES 
('GUQNH', 10, 100, 1000, 10000, 100000), 
('UJAHL', 20, 200, 2000, 20000, 200000), 
('YKXVW', 30, 300, 3000, 30000, 300000), 
('SXMOJ', 40, 400, 4000, 40000, 400000), 
('JTPGM', 50, 500, 5000, 50000, 500000), 
('ZITKS', 60, 600, 6000, 60000, 600000), 
('GGEYD', 70, 700, 7000, 70000, 700000), 
('UFXMS', 80, 800, 8000, 80000, 800000), 
('BNGGP', 90, 900, 9000, 90000, 900000), 
('AMUKO', 100, 1000, 10000, 100000, 1000000) 
GO

Per inserire o aggiornare una riga basta eseguire questo statement:

SQL Server Change Tracking - 3 di 3

Mauro Regoli

Negli articoli precedenti si è descritto il funzionamento del Change Tracking ed i passaggi necessari per attivarlo e configurarlo correttamente. E’ ora giunto il momento di analizzare come tale funzionalità può essere utilizzata in uno scenario comune, tipicamente presente in una soluzione di Business Intelligence, ma facilmente generalizzabile ed estendibile a qualsiasi altra esigenza simile.

Come per gli altri articoli, il PDF è scaricabile direttamente sa SkyDrive:

https://skydrive.live.com/redir?resid=DE51B95370407A5D!230

Gli altri articoli della serie

OUTPUT Clause and Triggers

Sergio Govoni

Recentemente ho avuto l’occasione di apprezzare la clausola OUTPUT per determinare il valore degli identificativi univoci (ID) per una colonna con proprietà IDENTITY, per le righe aggiunte a una tabella durante un’operazione di INSERT.

Come indicato sui books online, la clausola OUTPUT, implementata con SQL Server 2005:

Restituisce le informazioni da (o le espressioni basate su) ogni riga interessata da un’istruzione INSERT, UPDATE, DELETE o MERGE. Questi risultati possono essere restituiti all’applicazione di elaborazione per l’utilizzo nei messaggi di errore, l’archiviazione e altri scopi simili dell’applicazione. I risultati possono anche essere inseriti in una tabella o in una variabile tabella. Inoltre, è possibile acquisire i risultati di una clausola OUTPUT in un’istruzione nidificata INSERT, UPDATE, DELETE o MERGE e inserire tali risultati in una vista o tabella di destinazione”.

New book: Microsoft SQL Server 2012 High-Performance T-SQL Using Window Functions

Sergio Govoni

Su MS Press Blog è stata annunciata la pubblicazione del nuovo libro Microsoft SQL Server 2012 High-Performance T-SQL Using Window Functions; l’autore non ha bisogno di presentazioni, è il grande Itzik Ben-Gan.

Il testo è dedicato alle funzioni di windowing che si applicano tipicamente al sotto-insieme di dati (finestra) determinato dalla clausola OVER, introdotta con SQL Server 2005 e ampiamente estesa in SQL Server 2012. Il linguaggio T-SQL non è solo SELECT, INSERT, UPDATE, DELETE e MERGE; chi ha la possibilità di studiarlo si accorge ben presto di quanto sia ricco di statement set-based e di quanto sia importante avere un linguaggio dichiarativo per scrivere query!