jump to navigation

Personalizzare l’ordinamento di una query in SQL Server 2005 portando, in cima al risultato, il record col campo di ricerca uguale alla chiave. 16 Maggio 2008

Posted by gianfrasoft in Transact SQL.
Tags: , , , , , , , , ,
add a comment

Nell’ambito di una query di ricerca che, ad esempio, utilizza l’operatore LIKE vogliamo ottenere un risultato ordinato: per far ciò facciamo uso dell’operatore ORDER BY in questo modo:

SELECT
  *
FROM
  Tabella
WHERE
  Tabella.Campo1 LIKE '%CHIAVE%'
ORDER BY
  Tabella.Campo1

Se talora la chiave coincide esattamente col campo sul quale stiamo effettuando la ricerca, ovvero si verifica che in almeno un record Tabella.Campo1 = ‘CHIAVE’, possiamo ottenere che il record che la contiene venga posizionato in testa alla query di ricerca sfruttando la clausaola ORDER BY CASE di SQL Server 2005 in questo modo:

(continua…)

Una stored procedure per la duplicazione delle righe di una tabella generica 25 Aprile 2008

Posted by gianfrasoft in Transact SQL.
Tags: , , , , , ,
add a comment

Duplicare la riga di una tabella è una operazione sempre possibile ma spesso non immediata: la tabella in questione può essere caratterizzata dalla presenza di una chiave univoca che coinvolga uno o più campi, da campi NOT NULL che vanno valorizzati talora con i propri valori di default, ecc…

Lo script INSERT che effettua l’inserimento di una riga duplicata deve, nella maggior parte dei casi, specificare la lista dei campi da caricare nel nuovo record e questo perché lo script non deve definire valori duplicati per i campi chiave, se richiesto non deve sovrascrivere i valori di default, non deve definire valori per i campi auto-incrementali e quant’altro.

Consideriamo il caso, piuttosto diffuso, di tabelle caratterizzate da una chiave primaria composta da un campo auto-incrementale, e realizziamo una procedura che:

  • sia in grado di semplificare l’operazione di duplicazione della riga di una tabella, agendo indipendentemente dalla struttura della stessa;
  • restituisca l’indice univoco del campo chiave del nuovo record;
  • non valorizzi i campi che hanno valori di default;
  • agisca su una qualsiasi tabella dove sia presente una chiave primaria composta da un campo auto-incrementale.

(continua…)

Generare un recordset contenente tutti gli elementi di un intervallo in SQL Server 2005 13 Aprile 2008

Posted by gianfrasoft in Transact SQL.
Tags: , , , , , , ,
add a comment

Talvolta ci si trova a dover incrociare i dati di una query con le date di uno specifico intervallo.

Ad esempio, consideriamo una tabella che contiene le vendite effettuate da un’azienda nell’arco di un anno: vogliamo rappresentare in un recordset gli importi totali delle vendite di ogni mese. La questione si risolve con un semplice raggruppamento dati, ammenocché non si voglia riportare un importo nullo anche in corrispondenza dei mesi in cui non sono state effettuate vendite.

La soluzione ideale è quella di effettuare il raggruppamento dopo avere incrociato i dati delle vendite con un recordset contenente una riga per ciascuna data di inizio o di fine mese. Questo è possibile generando una tabella temporanea e popolandola, prima di effettuare la query sulle vendite.

Un’alternativa che agisca on the fly è quella basata sulle CTE ovvero Common Table Expression: le CTE consentono di effettuare query SQL di tipo ricorsivo, che è proprio quanto a noi serve.

(continua…)

Realizzazione di un servizio di prenotazione risorse on line in SQL 24 Febbraio 2008

Posted by gianfrasoft in Transact SQL.
Tags: , , , , ,
add a comment

Introduzione

Questo documento e tutto il lavoro che ne è scaturito, hanno come obiettivo la progettazione e l’implementazione di un sistema informatico che risponda alle richieste contenute nelle linee guida riportate di seguito: si è proceduto alla progettazione di una base dati per il supporto di un sistema informatico che realizzi un servizio web per la gestione di un insieme condiviso di risorse hardware per un dipartimento. Questo sistema informativo consente la prenotazione delle risorse da parte di utenti registrati, oltre a fornire come servizio la possibilità di verificare la disponibilità di una risorsa in uno specifico giorno ed in uno specifico orario.

Sono state così implementate tutte le funzionalità di:

  • inserimento di una risorsa
  • registrazione degli utenti
  • consultazione delle risorse disponibili
  • prenotazione delle risorse
  • cancellazione di una prenotazione
  • memorizzazione di dati relativi a utenti, risorse e prenotazioni

Strategia di progetto

Già nell’ambito delle linee guida si possono identificare le entità principali attorno alle quali il sistema informativo deve svilupparsi, e cioè: l’utente, la risorsa e la prenotazione.

Al fine di rendere il sistema quanto più possibile aperto e funzionale, si è ritenuto opportuno introdurre alcune ulteriori specifiche riguardanti le suddette entità:

  • gli utenti del sistema si dividono in due categorie: amministratori e utenti semplici; ai primi è dato potere di accedere ad ogni parte del sistema mentre ai secondi alcune aree di lavoro sono interdette;
  • ad ogni risorsa sono associati orari di disponibilità, cioè intervalli temporali all’esterno dei quali la risorsa non può mai essere prenotata;
  • alla prenotazione delle risorse da parte di utenti generici o di amministratori viene fornito un sistema di visualizzazione grafica degli intervalli temporali di disponibilità della risorsa che rende superfluo qualsiasi ulteriore accorgimento;
  • viene implementato a scopo didattico un semplice metodo di storicizzazione delle informazioni relativamente all’entità prenotazione che consente di aggirare alcuni problemi relativi all’aggiornamento delle risorse.

(continua…)