T-Sql

Conversioni implicite: cosa sono e che impatto hanno sulle nostre query

Luca Bruni

Come credo alla maggior parte di voi, spesso, anche a me capita di dover mantenere codice scritto da qualcun altro. Uno degli aspetti che (ri)trovo con una certa frequenza è che, spesso, non prestiamo attenzione a come scriviamo le nostre query, sottovalutando l’impatto che queste possono avere sul nostro sistema.

Proprio recentemente mi sono imbattuto in una serie di batch (dalle semplici query a complesse procedure) dove non si era prestata la dovuta attenzione all’utilizzo dei tipi dato (ad esempio nella definizione di variabili e costanti, ma anche nelle colonne delle stesse tabelle), andando di fatto a creare qualche inconveniente, oltre che di mera natura estetica (e quindi di qualità del codice), anche (e soprattutto) di natura prestazionale. Buona parte di questi problemi era dovuta all’utilizzo frequente delle funzioni di conversione CAST e CONVERT (dovuti a probabili errori di modellazione delle tabelle come ad esempio stessa colonna in due tabelle differenti ma con differente tipo dato), ma la parte più critica e rilevante era dovuta  alla presenza di una miriade di conversioni implicite.

Come calcolare il check-digit di un barcode in T-SQL

Sergio Govoni

Chi ha avuto l’opportunità di sviluppare software per la movimentazione delle merci, sa che per identificare, memorizzare e gestire in modo efficiente la movimentazione dei prodotti all’interno di un magazzino, è necessario adottare un sistema di movimentazione basato su codici a barre.

Un codice a barre è la rappresentazione grafica di una sequenza di numeri e altri simboli. La rappresentazione consiste di linee (barre) e spazi. Un codice a barre è tipicamente composto da cinque parti, una di queste è il carattere di controllo, noto anche come cifra di controllo.

TOP(n) WITH TIES, nuova feature? No, é sempre esistita!

Pasquale Ceglie

C’è ancora chi si meraviglia davanti all’opzione WITH TIES.

Molti non sanno che esiste o ne sottovalutano l’utilità.

Consideriamo la query

SELECT TOP 3 Name, ListPrice 
FROM SalesLT.Product 
ORDER BY ListPrice ASC;

Questa query ritornerà i primi 3 articoli ordinati per ListPrice crescente.

L’opzione WITH TIES indica che, invece di restituire solo il numero richiesto di righe, la query restituirà anche tutte le righe aventi lo stesso valore dell’ultima riga in base ai criteri di ordinamento (ListPrice, nel nostro caso). Questo significa che si potrebbero ottenere più righe rispetto a quelle richieste, ma la selezione delle righe diventa di tipo deterministico (al contrario del caso precedente).

Uso "nascosto" del tempdb

Luca Bruni

Qualche settimana fa, mentre ero al lavoro, mi sono ritrovato a dover risolvere un problema apparentemente non molto strano, ma che tuttavia nasconde qualche retroscena interessante. I fatti sono stati più o meno questi:

Circa a metà mattinata mi è stato segnalato un problema di prestazioni su uno dei sistemi che abbiamo in gestione nel nostro team di lavoro; dopo alcuni semplici controlli è stato subito chiaro che il rallentamento era sostanzialmente dovuto ad un problema di contency sul tempdb. “Beh.. abbastanza semplice!” - ho subito pensato! - “la colpa è mia perché (ahi ahi ahi) non ho ancora fatto lo split del file dati sul tempdb!”.

Usare json su SQLServer 2005, 2008, 2012 e 2014 .. è possibile!

Vedere il supporto nativo di JSON su SQLServer 2016 (e anche su Azure SQLDatabase) mi ha fatto pensare che magari era possibile averlo in forma semplificata anche su versioni precedenti.

Tutto è nato dalla necessità di gestire un flusso di dati con una Stored Procedure in arrivo da una WebAPI. Inizialmente la WebAPI, dopo aver fatto gli opportuni controlli logici di validità, deserializzava il flusso per poi formattare una stringa da passare alla Stored Procedure. La gestione del parametro in ingresso alla SP come TABLE non sembrava possibile utilizzando EF6, quindi si è optato di mantenere la SP nello stato originale, ovvero con la stringa e altri parametri per i caratteri separatori.