Site Meter febbraio 2011 - Posts - The SQL Server Side of Me

The SQL Server Side of Me

Blog di Luca Zavarella. Libero sfogo alle mie curiosità su SQL Server

febbraio 2011 - Posts

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

 

SQL Server 2008 R2 Business Intelligence Training Course

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! Smile 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??? Smile

Buona BI a tutti!!