febbraio 2011 - Posts
Salve a tutti
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
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
) 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! 
Salve ragazzi 
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! 
Ciao!
Salve a tutti! 
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! 
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:
trattati in modo eccellente da autori esperti del settore.
Che dire... basta avere un po' di buona volontà e SQL Server diventa accessibilissimo!!! 
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
, mi vedo restituire il resultset correttamente:

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:

Lezione di oggi: non si finisce mai di imparare!! 
Alzi la mano chi di voi è spesso costretto ad arrangiarsi nell'imparare una tecnologia, anche quando questa è richiesta in ambito lavorativo...
Sì... vedo una marea di mani alzate!
E' "normale", purtroppo molto spesso la formazione è vista come un costo e non come un investimento.
Però non disperate! Se c'è qualcuno tra voi interessato come me alla BI, può usufruire di questo fantastico corso scaricabile gratuitamente (SQLInsights):
http://msdn.microsoft.com/en-us/SQL10R2BYFBI-TrainingCourse
Io l'ho già scaricato e sto per dedicarci qualche ora. Voi cosa state aspettando??? 
Buona BI a tutti!!