Site Meter The SQL Server Side of Me

The SQL Server Side of Me

Libero sfogo alle mie curiosità su SQL Server
Importare più pacchetti SSIS in BIDS in un sol colpo!

Vi è mai capitato di dover aggiungere più di un pacchetto esistente (immaginiamo 20 pacchetti) di Integration Services in un progetto SSIS? Bene, qualcuno di voi penserà giustamente che una Open Dialog supporti la selezione multipla di file per importarne più di uno alla volta…

Ebbene, in BIDS l’Open Dialog non permette questa cosa, si può selezionare un solo file!!! Di qui la perdita di tempo prezioso speso ad importare i pacchetti uno alla volta.

Oggi sono però venuto a conoscenza di un trucchetto che risolve il problema, grazie a questo post di Matt Masson.

E’ sufficiente copiare da Windows Explorer tutti i pacchetti da importare (CTRL + C):

Dopodiché basta cliccare col destro sulla cartella SSIS Packages del progetto di Integration Services e fare un semplice Past:

Ora “automagicamente” avremo tutti i pacchetti importati nel nostro progetto!!

Che dire… questa feature era ben nascosta!! Smile

SSMS Tools Pack aggiornato alla versione 2.1.0

L’SSMS Tools Pack (http://www.ssmstoolspack.com) è uno degli add-in free più gettonati di SQL Server Management Studio. Infatti si è visto aggiudicare la medaglia di bronzo per il miglior tool free dell’anno 2011 dal SQL Magazine.

Recentemente, col passaggio alla versione 2.0, sono state introdotte parecchie novità. Una delle più importanti è l’Execution Plan Analyzer, che mira a semplificare il lavoro di chi deve operare troubleshooting analizzando i piani di esecuzione. Grazie a questa nuova feature è immediato trovare gli operatori più costosi di un piano di esecuzione. Oltre a ciò, l’Execution Plan Analyzer fornisce una traccia di soluzione per ogni problema che individua nella scansione del piano di esecuzione.

Grant Fritchey ha fornito una eccellente descizione delle nuove feature introdotte nella versione 2.0 in questo suo post:

http://www.simple-talk.com/sql/sql-tools/ssms-tools-pack-2.0/

Inoltre, è da poco disponibile la versione 2.1 del tool, che estende la compatibilità a SQL Server 2012 RC0 e risolve alcuni bug relativi alla SQL History.

Un grande ringraziamento va dunque a Mladen Prajdić (trovate il suo blog qui), sviluppatore del tool, che, grazie al suo lavoro, ci semplifica la vita! :)

Restare informati grazie al “Data Explorer”

Quest’anno al Pass Summit 2011 è stato presentato un nuovo progetto facente parte dei Microsoft SQL Azure Labs, il progetto Microsoft Codename “Data Explorer”.  Secondo quanto riportato nel blog ufficiale (http://blogs.msdn.com/b/dataexplorer/), questo nuovo strumento “offre un modo innovativo per acquisire nuove conoscenze a partire dai dati che ti interessano”. In soldoni, il Data Explorer ti permette di riunire dati provenienti da più sorgenti, per poi pubblicare e condividere il risultato ottenuto. Inoltre, è in grado di generare flussi di dati nel formato aperto RESTful (Open Data Protocol), i quali poi possono essere utilizzati da altre applicazioni. Ciò non toglie che si possa utilizzare Excel o PowerPivot per analizzare i risultati ottenuti.

Le sorgenti possono essere le più disparate: fogli Excel, file di testo, database, Windows Azure Marketplace, ecc. Per chi non conoscesse quest’ultima risorsa, consiglio caldamente di buttare un occhio sui data service che il Marketplace mette a disposizione:

https://datamarket.azure.com/browse/Data

A dir la verità, mentre leggevo i post del blog suddetto, mi è venuto spontaneo pensare al Data Explorer come ad un “SSIS su Azure” indirizzato ai Power User :) In effetti, leggendo la risposta di Tim Mallalieu (Group Program Manager di Data Explorer) al commento fatto ad un suo post, ho avuto un riscontro positivo alla mia prima impressione:

“…we originally thinking of ourselves as Self-Service ETL. As we talked to more folks and started partnering with other teams we realized that would be an area that we can add value but that there were more opportunities emerging.”

Le operazioni tipiche della fase ETL (lavorazione e organizzazione dei dati in formati diversi) si ottengono grazie al Data Explorer Mashup. Questa è una immagine del tool:

La flessibilità nella manipolazione delle informazioni è data dal Data Explorer Formula Language. Trattasi di un linguaggio specifico basato su formule, in stile Excel:

Chi volesse approfondire l’argomento, oltre al blog suddetto, può consultare la home del progetto:

http://www.microsoft.com/en-us/sqlazurelabs/labs/dataexplorer.aspx

Alla luce di questo nuovo progetto, è indubbia l’intenzione di Microsoft di avvicinarsi sempre più al Power User, fornendogli strumenti flessibili e assai facili da utilizzare per l’analisi dei dati. L’esempio principe in questo senso è PowerPivot.

Il dubbio amletico che resta è sempre lo stesso: avere in una azienda più Power User vorrà dire avere implicitamente diversi modelli di dati che rappresentano la stessa realtà; ma tutto questo potrebbe portare inevitabilmente all’anarchia della gestione dei dati… Voi che ne pensate?

Versione 2 di SQL Treeo rilasciata

E’ stato rilasciato un nuovo aggiornamento di SQL Treeo (http://www.sqltreeo.com).

Numerosi i bug risolti e sembra che finalmente l’add-on cominci a diventare stabile.

Il changelog completo lo trovate qui:

http://www.sqltreeo.com/wp/new-version-of-sql-treeo-ssms-productivity-add-in-was-released/

Aggiornate i vostri client SSMS Smile

Un nuovo ricettario di MDX per lo sviluppatore SSAS

E’ disponibile un nuovo testo su MDX, scritto in forma di ricettario: 80 ricette per chi già possiede un minimo di familiarità con MDX. Il testo è della Packt Publishing:

http://www.packtpub.com/mdx-with-microsoft-sql-server-2008-r2-analysis-services/book

Trovate la recensione del libro fatta da Marco Russo qui.

Sono interessanti le risposte che Marco fornisce ad alcuni commenti del suddetto post circa la “disputa” tra MDX e DAX.

Buona lettura a tutti!

Posted: ago 30 2011, 09.18 by lucazav | with no comments
Filed under: , , , , ,
Eseguire l’SSMS della propria macchina come utente di dominio, pur non essendo in dominio

Mi sono sempre chiesto se fosse possibile utilizzare il client SSMS della propria macchina con un utente di dominio specifico quando la macchina stessa non fosse stata nel dominio in oggetto. Questo perché molti sviluppatori fanno uso di alcuni add-on di SSMS installati sulla propria macchina (con relativa licenza), i quali semplificano di molto il loro lavoro quotidiano.

Io, ad esempio, sono un Red Gate SQL Prompt - addicted Smile. Mi torna quindi molto comodo poter lavorare sulle istanze di SQL Server dei clienti con il suddetto tool. Dunque, ispirato dal post dell’amico Davide Mauri, ho preparato un piccolo file batch che permette di specificare l’utente e dominio col quale si vuole avviare l’applicazione:

@echo off
echo ***************************************
echo *** Run SSMS 2008 R2 as domain user ***
echo ***************************************
echo.

set /P user="Type the domain\username: "

C:\Windows\System32\runas.exe /netonly /user:%user% "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe"

Creando poi un link sul desktop che punti al file batch creato, e magari abbellendo il link con la stessa icona di SSMS (prendendola dall’eseguibile di SSMS indicato nel file batch), si può eseguire il client SSMS impostando l’utente di dominio on-the-fly :

Ed ecco che “automagicamente” il gioco è fatto! Smile

EDIT:

Grazie al commento di Colin sul post del mio blog in inglese, sono venuto a conoscenza di una ulteriore scorciatoia per ottenere lo stesso risultato.

Basta tenere premuto il tasto SHIFT e cliccare col destro sull'icona dell'applicazione:

Selezionando la voce "Run as different user", si possono inserire le credenziali in una dialog apposita:

L'unico problema è che l'utente che si inserisce in questa dialog deve essere configurato sulla macchina, mentre, utilizzando il batch suddetto, si può utilizzare un qualunque domain user.

Non si finisce mai di imparare! Smile

Cartelle custom nel SSMS Object Explorer? Da oggi si può!

Quando si ha un gran numero di oggetti da gestire nel SSMS Object Explorer, spesso ci si perde nella ricerca di essi. A volte sarebbe utile poter catalogare tali oggetti in cartelle, magari rispettando la medesima suddivisione in layer logici della soluzione che si sta sviluppando.

A tale scopo viene in nostro aiuto un add-in per SSMS:

http://www.sqltreeo.com

L’utility viene commentata dal proprio autore in un post del suo blog:

http://www.sqltreeo.com/wp/dowload-free-ssms-add-in-to-create-own-folder-for-database-objects/

Un altro tool da aggiungere nella nostra cassetta degli attrezzi Winking smile

Introduzione ai Database Relazionali online presso la Stanford University!

Quanti di voi conoscono esattamente la definizione di “database relazionale”? L’aggettivo “relazionale” a cosa si riferisce esattamente? Parecchi si lasciano trarre in inganno, associando tale aggettivo alle relazioni intese come vincoli di foreign key tra tabelle. Invece sotto quell’aggettivo si cela tutto un mondo basato sulla teoria degli insiemi, sull’algebra relazionale e sul concetto di relazione intesa come tabella.

Ebbene, per chi volesse approfondire i concetti fondamentali della teoria dei database relazionali, la Stanford University School of Engineering offre al pubblico un corso gratuito online di introduzione ai database.

Registratevi in questa pagina:

http://www.db-class.com/

Il corso durerà 2 mesi, al termine dei quali è previsto un esame finale. Il superamento di quest’ultimo darà diritto al partecipante di ricevere un attestato di superamento con esito positivo del corso.

Il dettaglio della schedulazione delle lezioni lo trovate qui.

Buono studio a tutti! Smile

Generare lo script di INSERT dei dati di una tabella

In realtà aziendali in cui vengono gestiti più ambienti dedicati al ciclo di vita di un database (ad es. Sviluppo, Qualità e Produzione) capita spesso di dover copiare i record da una tabella di produzione nella equivalente tabella di sviluppo, in modo da debuggare eventuali errori.

Ebbene, troppo spesso ho visto fare il CTRL+C dalla finestra di Edit della tabella di produzione e poi il CTRL+V nella finestra di Edit della tabella di sviluppo… E questo quando era possibile connettersi con lo stesso client SSMS (SQL Server Management Studio) alle due istanze di SQL Server (per la serie “L’Import/Export Wizard, questo sconosciuto”!). Quando le due istanze non erano raggiungibili dallo stesso client, si aggiungeva uno step intermedio al workflow sopra descritto, che consisteva nell’incollare le righe copiate su un foglio Excel (sempre col CTRL+C – CTRL+V ovviamente)… Vi lascio immaginare i problemi di formattazione, cosa veniva fuori quando i punti decimali dovevano trasformarsi in virgole a seconda della localizzazione di Office, oppure quando le date non venivano riconosciute!! :)

Nel SSMS esiste la possibilità di generare non solo lo script dei metadati delle tabelle (tasto destro sulla tabella e poi Script Tabel as…), ma anche lo script di INSERT dei dati. Basta cliccare col destro sul nodo del database (nel nostro caso AdventureWorks) cui appartiene la tabella e cliccare la voce Tasks –> Generate Scripts…

Dopo aver bypassato la schermata di introduzione, si ha la possibilità di scegliere gli oggetti per i quali generare lo script. Nel nostro caso selezioneremo solo la tabella Production.Product:

Nella schermata successiva abbiamo la possibilità di selezionare la destinazione dello script (nel nostro caso New Query Window) e soprattuto cosa includere nello script (se solo dati, solo schema oppure entrambi), tramite l’opzione Types of data to script raggiungibile cliccando sul pulsante Advanced:

Cliccando Next alle successive schermate, si ottiene una nuova finestra nel SSMS in cui abbiamo il nostro script (nello screenshot indentato e “ritoccato” per comodità):

Possiamo a questo punto salvare il nostro script ed eseguirlo sull’ambiente di destinazione (oppure consegnarlo al DBA che dovrà occuparsene).

Qualcuno di voi potrà obiettare che spesso non è necessario sempre dover creare uno script con le INSERT di tutte le righe, bensì di un particolare sottoinsieme di righe. Supponiamo nel nostro caso di dover estrarre tutti i prodotti che abbiano il ProductNumber con le iniziali C, D ed E.

Benissimo, a questo punto dobbiamo ricorrere ad un tool gratuito che si integra in SSMS e che agevola di molto il nostro lavoro. Il tool è SSMS Tools Pack.

Dopo averlo installato, notiamo che in SSMS compare una nuova voce nel menù principale, accanto a View, denominata SSMS Tools. Inoltre, cliccando col destro sugli oggetti dell’Object Explorer, la stessa voce appare anche nel menù contestuale.

In particolare, cliccando col destro sul nodo della tabella Production.Product e selezionando la voce SSMS Tools –> Generate Insert Statements…, ci viene mostrata una dialog che ci permette sia di indicare un numero fissato di righe da estrarre, oppure di “rifinire” la query SELECT * FROM Production.Product tramite l’aggiunta di filtri (clausula WHERE) o di ordinamenti (clausula ORDER BY). Nel nostro caso, vogliamo aggiungere solo una clausula di WHERE:

A questo punto possiamo generare il nostro script:

Possiamo osservare che ci sono delle differenze sostanziali tra lo script generato da SSMS di default e quello generato dal tool. Quest’ultimo script presenta:

  1. l’istruzione SET NOCOUNT ON, per non includere nel resultset il messaggio che riporta il numero di righe elaborate dallo script
  2. l’istruzione SET XACT_ABORT ON, che spinge l’engine ad eseguire automaticamente il rollback delle transazioni nel caso in cui una istruzione T-SQL generi un errore
  3. un blocco BEGIN TRANSACTION … COMMIT, che assicura che tutte le righe vengano inserite nella tabella; in caso di errore, il rollback automatico annullerà l’eventuale errore intercorso
  4. i valori di tipo datetime espressi in un formato leggibile e indipendente dalla localizzazione di SQL Server
  5. l’utilizzo della sintassi INSERT … SELECT, che fa parte dei metodi di bulk loading previsti da SQL Server. Sotto determinate circostanze (http://msdn.microsoft.com/en-us/library/dd425070.aspx), questa sintassi fa sì che la INSERT sia minimally logged.

Anche se non sono state trattate in questo post, vi suggerisco di buttare un occhio anche sulle altre feature del SSMS Tools Pack, che si è dimostrato essere sicuramente un altro tool utile per il nostro lavoro quotidiano con SQL Server :)

Data Cleansing con il nuovo componente SSIS di Red Gate!

Ci sono cei casi in cui, durante la migrazione di dati tramite un pacchetto di Integration Services, si rende necessario un lavoro di pulizia del dato. Vi è mai capitato, ad esempio, di dover convertire on the fly degli importi multi-valuta in un’unica valuta di destinazione? Oppure, di dover effettuare delle ricerche mirate per tutti gli item di un campo di tabella (magari tramite espressioni regolari) ed operare dunque le opportune modifiche agli item stessi? Si può pensare una soluzione basata su T-SQL; nel caso delle espressioni regolari bisogna però ricorrere alla CLR Integration (i curiosi possono leggere questo articolo). Trattasi sicuramente di soluzioni abbastanza laboriose, senz’ombra di dubbio tutt’altro che “user friendly” :)

Bene! Red Gate ci mette a disposizione un componente SSIS gratuito, il Data Cleanser for SSIS, che risolve agevolmente i problemi suddetti, senza ricorrere allo scripting o a .NET. Dopo aver scaricato ed installato il componente, è necessario aggiungerlo nella toolbox di BIDS. Nella guida Adding Data Cleanser to the Toolbox è spiegato come fare.

A questo punto è possibile utilizzare il nostro nuovo componente tramite il semplice drag&drop dalla toolbox:

Essondo il nostro nuovo componente un Data Flow Transformation, riceverà in input un flusso dati, ad esempio:

Facendo doppio click sull’oggetto Data Cleanser, ci viene mostrata l’interfaccia di configurazione del componente:

Nel riquadro in alto a sinistra si possono selezionare quei campi sorgente ai quali si vuole applicare un’azione di cleansing. Queste ultime vengono selezionate nel riquadro in alto a destra, tramite il menù a tendina. La flessibilità dello strumento è tale che è possibile selezionare uno o più metodi di cleansing per uno o più campi contemporaneamente. In particolare, per applicare i metodi di cleansing a più campi, bisogna prima raggruppare questi ultimi tramite il pulsante Group. Una descrizione più dettagliata dell’interfaccia utente si trova qui.

Le cleansing action che abbiamo a disposizione sono:

  1. Convert Currency
  2. Find & Replace
  3. Normalize Letter Case
  4. Normalize Date
  5. Trim String

La prima azione, che consiste nel convertire on-the-fly degli importi in valuta, è quella che richiede più impostazioni da settare e infatti viene descritta più in dettaglio qui. Nel precedente link sono descritte brevemente anche le altre azioni. Per completezza allego qui di seguito gli screenshot associati a queste azioni, le impostazioni delle quali sono così intuitive che si spiegano da sole :)

 

Dunque un ottimo strumento, facile da usare e al tempo stesso molto flessibile: da avere pronto nella propria cassetta degli attrezzi per ogni evenienza :)

Lavori spesso con file CSV? La soluzione è CSVed!

Chi ha spesso a che fare con l’importazione o esportazione dei dati, si è imbattuto almeno una volta nella sua vita con un file CSV (Comma Separated Values). Altro non è che un file di testo, formattato in un certo modo ed utilizzato per rappresentare dati tabellari. Ogni riga della tabella viene mappata in una riga del file, ed ogni suo elemento è separato da un carattere separatore (ad es. il punto e virgola, il carattere di tabulazione, ecc.).

Consideriamo un semplice file CSV e apriamolo con Notepad:

Ora capita spesso che sulla nostra macchina l’estensione .CSV è associata a Microsoft Excel, dunque siamo tranquilli: un doppio click e ci prepariamo a lavorare con tutti gli strumenti che Excel ci mette a disposizione. Peccato però che le nostre aspettative vengono spesso deluse.  Innanzi tutto, il file viene spesso aperto senza essere interpretato correttamente: gli elementi separati dal carattere separatore non vengono visualizzati ognuno in una cella; l’intera riga viene inserita in una sola cella:

A questo punto, o ci si arma di buona pazienza e si cerca di ovviare al problema forzando manualmente l’interpretazione del contenuto tramite l’opzione Dati –> Testo in colonna e andando poi a definire l’esatto tipo di dato per ogni colonna, oppure si manda all’altro paese il nostro buon Excel e ci si rassegna a lavorare con il tanto caro Notepad.

Non tutti sanno però che è disponibile un software free (per esattezza, cardware) che risolve brillantemente i nostri problemi. Trattasi di CSVed e può essere scaricato qui:

http://csved.sjfrancke.nl/

L’interfaccia che si presenta all’utente mostra a tutti gli effetti l’enorme quantità di operazioni che è possibile effettuare su un file CSV:

Per poter lavorare agevolmente col nostro file di esempio, è necessario prima impostare correttamente sia il separatore utilizzato nel nostro file (vedi figura precedente), sia l’opzione che evita di rimuovere spazi e zeri anteposti a numeri/caratteri tramite il menù Tools –> Options, togliendo la spunta sul flag relativo:

Dopodiché è sufficiente trascinare il nostro file nello spazio di lavoro di CSVed e voilà! il gioco è fatto:

Con questo magico strumentino potete dunque lavorare agevolmente con i vostri file CSV senza dover impazzire col Notepad! Smile

Posted: mar 30 2011, 11.55 by lucazav | with no comments
Filed under: , ,
Le modifiche tramite GUI della struttura di una tabella già popolata restituiscono errore!

Salve a tutti Smile 

ieri un collega mi ha chiesto per quale motivo quando modifica la struttura di una tabella già popolata tramite GUI, il sistema non gli permette di fare la modifica, restituendo un errore. In particolare, doveva modificare la lunghezza del campo chiave, lasciando il contenuto della tabella invariato.

Cerchiamo di riprodurre il caso e di vedere cosa accade. Utilizziamo il seguente script, che crea e popola una tabella di prova nel tempdb:

USE tempdb;
GO

CREATE TABLE Prova(
[Key] nvarchar(10) NOT NULL PRIMARY KEY
,
Value int
)
GO

INSERT INTO Prova
VALUES ('KEY1', 1)
, ('KEY2', 2)
, ('KEY3', 3)
GO

Cliccando su "Design" per la tabella apppena creata, si vede questo:

Proviamo dunque a modificare la lunghezza del campo chiave da 10 a 20, e a salvare le modifiche effettuate:

In effetti la modifica non viene permessa. Il messaggio dell'alert, però, fa riferimento ad una opzione che non permette che una tabella venga "droppata" e ricreata...

SSMS ha bisogno di verificare che sappiamo ciò che stiamo facendo Smile In pratica, si può dire a SSMS di droppare e ricreare la tabella automaticamente. L’unica cosa è che bisogna stare attenti al fatto che il sistema, per automatizzare questa operazione, deve copiare il contenuto della tabella in una tabella temporanea, droppare la tabella, ricreare la tabella con le modifiche apportate e dunque eseguire le insert delle righe presenti nella tabella temporanea. Pertanto, se si ha a che fare con una tabella contenente una ingente quantità di dati, l’operaizione da GUI comporta un sicuro stress sul server.

Per diventare utenti trusted per SQL Server, basta togliere il flag dalla opzione (Tools --> Options) riportata in figura:

Dopo aver tolto il flag all'opzione suddetta, è possibile salvare le modifiche effettuate dalla GUI.

Non c'è dubbio che la migliore cosa da fare è mettere da parte la nostra pigrizia (non preoccupatevi, noi tutti abbiamo usato la GUI Smile) e ricorrere a tre semplici righe di script in T-SQL. In questo modo si evita l'overhead della copia dei dati. In particolare, nel nostro caso è sufficiente droppare il constraint, modificare il campo e poi creare nuovamente il constraint:

ALTER TABLE Prova DROP CONSTRAINT PK_Prova;
GO

ALTER TABLE Prova ALTER COLUMN [Key] nvarchar(10) NOT NULL;
GO

ALTER TABLE Prova ADD CONSTRAINT PK_Prova PRIMARY KEY ([Key]);
GO

Buon T-SQL a tutti! Smile

"Free! Training Webinar Series" di marzo

 Salve ragazzi Smile

 Pragmatic Works, SQL Server Central e Microsoft organizzano dei webinar gratuiti online distribuiti nel mese di Marzo.

http://app.streamsend.com/s/1/S8b3/dHSiQlb/6f

Gli argomenti sono interessantissimi. Dunque iscrivetevi numerosi! Smile

Ciao!

Come salire la scala della conoscenza di SQL Server?

Salve a tutti! Smile

Riallacciandomi al contenuto dell'editoriale dell'ultima newsletter ricevuta da UGISS (I BLOGs come strumento interattivo di formazione e supporto), voglio portare all'attenzione di tutti gli appassionati di SQL Server una lodevole iniziativa di Red Gate (http://www.red-gate.com) e SQL Server Central (http://www.sqlservercentral.com/).

Tutti noi abbiamo almeno una volta navigato in Internet per cercare informazioni su uno specifico argomento di SQL Server. Sicuramente il materiale trovato ha risposto in qualche modo alle nostre esigenze, ma spesso ci si perde nel bel mezzo di una marea di informazioni che, per la stessa natura dei blog, non possono essere "organizzate". Ebbene, da oggi sono disponibili delle serie di articoli su SQLServerCentral, denominate Stairway, che sono organizzate in modo che l'utente che vuole imparare un determinato argomento su SQL Server può partire dalla "conoscenza zero" fino ad un livello che ne permette l'utilizzo in ambienti di produzione.

Queste nuove serie di articoli-tutorial sono supervisionati dalla super esperta Kalen Delaney (qui trovate il suo blog), dunque aspettatevi un risultato spettacolare! Smile

La home di questi tutorial si trova qui:

http://www.sqlservercentral.com/stairway/ 

e ad oggi, dopo essersi registrati gratuitamente su SQL Server Central, è già possibile approfondire argomenti quali:

  • Database Design
  • Integration Services
  • MDX
  • Server-side Tracing
  • SQL Server Agent
  • SQL Server Indexes
  • SQL Server Replication
  • SQL Server Reporting Services
  • StreamInsight

trattati in modo eccellente da autori esperti del settore.

Che dire... basta avere un po' di buona volontà e SQL Server diventa accessibilissimo!!! Smile

Funzioni di data e ora in query di aggregazione

Salve a tutti,

oggi mi è capitata per sbaglio una cosa che non mi aspettavo. In una semplice query di aggregazione mi ero dimenticato di eliminare un campo con la funzione GETDATE() tra quelli presenti nella SELECT:

SELECT
    SOD.SalesOrderID
    , SUM(SOD.LineTotal) AS LineTotal
    , GETDATE() AS MyDate --< non contenuta nel group by
FROM Sales.SalesOrderDetail AS SOD
GROUP BY SOD.SalesOrderID;

Essendo il GETDATE non definito all'interno del GROUP BY, mi sarei aspettato che l'esecuzione della query restituisse un errore. E invece, quasi per magia Smile, mi vedo restituire il resultset correttamente:

Query di aggregazione col GETDATE

 Ho poi verificato che la query funziona correttamente con tutte le funzioni di data e ora:

  • SYSDATETIME()
  • SYSDATETIMEOFFSET()
  • SYSUTCDATETIME()
  • CURRENT_TIMESTAMP
  • GETUTCDATE()

Effettivamente, i valori restituiti da tali funzioni vengono visti come costanti, dunque le funzioni che li generano vanno omesse dalla clausula GROUP BY.

Se si volesse include la funzione in oggetto nella clausula GROUP BY, si otterrebbe un errore:

Errore con GETDATE nel GROUP BY

Lezione di oggi: non si finisce mai di imparare!! Smile

 

More Posts Next page »