Posts

Babbo Natale e gli indici univoci filtrati

Image
Buongiorno a tutti! Anche per oggi ben ritrovati. Si sa anche Babbo natale per gestire la sua attivitΓ  di consegna regali natalizi ai bambini ricorre ad una applicazione che memorizza i dati su di un database. Non per un discorso di tracciabilitΓ  per caritΓ , piuttosto, data la sua veneranda etΓ , per un problema di memoria. Riveleremo oggi, qui, ora, ed in anteprima mondiale che il beniamino di tutti i bambini utilizza nientedimenochΓ¨ che SQL Server di Microsoft. Ora sul suo server ben raffreddato dai ghiacci del polo nord Γ¨ presente un database davvero molto semplice: Una tabella Bambini (master) con il nome e l'indirizzo di tutti i bambini del mondo. Una tabella Giochi (master) con l'elenco di tutti di giochi del mondo (attenzione ....nessuno escluso) Infine una tabella Regali di dettaglio dove memorizzare, anno per anno, quale regalo ha ricevuto il bambino. Ecco qua (sempre in anteprima mondiale) la struttura del suo database:            ...

Identificare la versione di SQL server? Semplice!

Image
Cari lettori ben ritrovati dopo questa pausa di una settimana! Eccoci nuovamente qua assieme, e con le batterie ricaricate al 100%, pronti per nuovi ed interessanti articoli. Scaldiamo quindi i motori con un articolo easy. Gli inglesi avrebbero scritto " How to identify your SQL Server version? ", noi perΓ² siamo italiani e quindi scriviamo come identificare la versione di SQL server installata . Innanzitutto diciamo che due sono i modi in cui Γ¨ possibile farlo . Tramite l' SSMS ovvero il SQL Server Management Studio e tramite comando T-SQL. Vediamo il primo metodo. Eseguiamo l' SSMS e dal nome del server facciamo tasto destro sulla voce ProprietΓ :               Si aprirΓ  una finestra. Da qui possiamo leggere la riga Versione :   Per vedere il secondo metodo aprite una nuova console e scrivete: SELECT @@VERSION Eseguitela ed ecco qui il risultato. Possiamo vedere che con questo metodo le informazioni ritornate sono p...

COLLATE e SARGABLE

Image
Ben ritrovati! Anche oggi articolo leggero leggero.. Continuiamo con  il discorso di ieri che trovate qui: SQL Server: Come fare ricerche CASE SENSITIVE Abbiamo visto come eseguire una ricerca CASE SENSITIVE anche se il database non lo Γ¨. Abbiamo visto infatti che possiamo sfruttare la COLLATE per ottenere il risultato voluto. Ad esempio scrivendo una Query cosΓ¬: SELECT * FROM ELENCO WHERE CODICE COLLATE SQL_Latin1_General_CP1_CS_AS = 'luca' La domandi di oggi Γ¨ la seguente: Ma se specifico una COLLATE nella WHERE, la stringa SQL che ottengo, Γ¨ SARGABLE?    La collate Γ¨ Sargable? Vediamolo, eseguiamo quindi la nostra Query e guardiamone il piano di esecuzione...   Che ne dite? Sul campo CODICE esiste un indice non clustered.   Di questo indice perΓ² ne viene fatta la scansione (SCAN) e non la SEEK e quindi la nostra Query NON E' SARGABLE! SQL Server sarΓ  costretto a scorrersi e leggersi tutto l'indice e come risultato avremo scarse perfor...

SQL Server: Come fare ricerche CASE SENSITIVE

Image
Carissimi lettori, ben torrnati! L'articolo di ieri Γ¨ stato sicuramente intenso ( Database corrotti, recupero tramite DBCC WRITEPAGES ) per cui oggi sarΓ² molto piΓΉ breve. Promesso! Vi farΓ² vedere come eseguire una ricerca case sentitive anche se la collate impostata sul database non lo Γ¨. Ricerche case sensitive Supponiamo di aver impostato sul nostro database una collate che non Γ¨ case sensitive. Ovvero non Γ¨ sensibile alle maiuscole e minuscole. Supponiamo ora di avere una tabella "elenco" dentro la quale sono memorizzati una serie di nomi, come questa sotto: Ora, il nostro database non Γ¨ case sensitive per cui una interrogazione come questa: SELECT * FROM ELENCO WHERE CODICE = 'LUCA' ritornerΓ  sempre entrambi i record. Ma se volessimo restituito solamente il codice dove LUCA Γ¨ scritto solo in minuscolo? Come fare? Bhe, il trucco Γ¨ semplice. Avete presente quando abbiamo parlato nei giorni scorsi di COLLATE ?  (fai click qui: Error...

Database corrotti, recupero tramite DBCC WRITEPAGES

Image
Ciao a tutti! Oggi si fa sul serio! Con l'articolo odierno vorrei mostrarvi come recuperare un errore forzando il puntamento delle pagine. Avremo così l'occasione di introdurre gli ultimi due comandi da tenere nella vostra cassetta degli attrezzi che sono il DBCC IND ed il DBCC WRITEPAGE Un Avvertimento però: mai provare su un database di cui non si abbia un backup, il rischio è di far danni seri! Buona lettura! Database corrotti e DBCC WRITEPAGES Supponete anche anche oggi vi siate trovati tra le mani un database corrotto. Subito vi siete collegati ed avete eseguito il comando DBCC CHECKDB . Il log vi mostra l'errore. La situazione che vi si presenta di fronte è questa: ... Per l'oggetto "sys.wpr_bucket_table"sono disponibili 0 righe in 0 pagine. Messaggio 8939, livello 16, stato 98, riga 28 Errore di tabella: ID di oggetto 581577110, ID di indice 1, ID di partizione 72057594043170816, ID di unità di allocazione 72057594049658880 (tip...

Database Corrotti e la tabella suspect_pages

Image
Ciao a tutti! Nell'articolo precedente abbiamo visto come controllare se un database Γ¨ corrotto oppure no (fai click qui: La megaditta Γ¨ ferma! ..DBCC CHECK fallito ) Il comando che avevamo utilizzato in precedenza Γ¨ il comando DBCC CHECKDB . Oggi vi faccio vedere un modo diverso "ma molto furbo" per vedere quali tabelle si sono corrotte. Lo si puΓ² usare mentre il DBCC sta verificando i databases dacchΓ¨ l'operazione richiede tempo in caso di database di dimensioni notevoli.Seguitemi, si parte! La tabella suspect_pages Diciamo subito che SQL Server quando trova degli errori se li memorizza un una tabella apposita. Questa tabella si chiama suspected_pages ed Γ¨ contenuta nel database di sistema msdb .Aprite quindi la console del SQL Server Manager Studio scrivete: SELECT * FROM [msdb].[dbo].[suspect_pages] Eseguitela ed ecco qui il risultato: Anche questo comando ci dice che Γ¨ presente la pagina 26094 che ha un problema. Ora che abbiamo il numero d...

La megaditta Γ¨ ferma! ..DBCC CHECK fallito

Image
Rieccoci! Prima di tutto, grazie delle tante visite, noi nonostante il caldo siamo ancora qui anche per farvi compagnia in questo assolato agosto. Avviso di servizio: tra una settimana ci prenderemo una breve pausa, se volete potrebbe essere l'occasione ideale per rileggere ciò che vi è scappato! L'articolo di oggi rappresenta il proseguo di quello di ieri ( Di database corrotti ed aziende bloccate ), una sorta di parte 2. L'argomento è vasto e così questa volta vedremo come controllare se un database è corrotto o meno . Vedremo che a volte sarà possibile individuare quali sono la tabelle rovinate e che non sono più leggibili. Stavolta non faremo nulla di pericoloso, percui provate e cercando di acquisire dimestichezza. Buona lettura! Riassunto della puntata precedente. Il vostro cliente più grosso nonchè titolare della megaditta vi ha telefonato perchè improvvisamente a due giorni dalla chiusura estiva improvvisamente nessuno riusciva più a lavorare con il ...

Di database corrotti ed aziende bloccate

Image
Come nei migliori racconti noir , squilla il telefono, il volto di chi risponde cambia espressione. Si sente il tono piu animato del solito. Ecco immaginatevi una scena cosi e trasponetela nel mondo dell'informatica. Chi risponde al telefono siete voi. L'interlocutore misterioso un vostro grosso cliente, unico proprietario della megaditta. Il motivo della discussione Γ¨ presto detto. Tutti sono fermi, nessuno riesce a lavorare . Logistica ferma, fatturazione ferma produzione ferma! E poi ... e poi siamo nella settimana centrale di agosto quindi anche la megaditta tra un giorno o due chiuderΓ . La pressione che aveva giΓ   iniziato a farsi sentite, diventa palpabile! Ovviamente sono passati solo pochi battiti di ciglia ma siete giΓ  collegati sul server del vostro cliente! Certo il vostro ufficio Δ— un ambiente fresco ma sulla vostra fronte fanno comunque capolino goccie di sudore: il database si Γ¨ corrotto! Ah, ecco perchΓ¨ nessun riesce piΓΉ a entrare nel vo...

Errore Messaggio 468: Non Γ¨ possibile risolvere il conflitto tra le regole di confronto "AAAA" e "BBBB" nell'operazione equal to.

Image
Howdy people! Il mondo Γ¨ sempre piΓΉ globale e per questo motivo sempre piΓΉ spesso ci troviamo ad avere a che fare con installazioni di SQL Server localizzate in nazioni ben diverse dalla nostra.   Sono certo che questo errore vi sarΓ  capitato almeno una volta: Messaggio 468, livello 16, stato 9, riga 19 Non Γ¨ possibile risolvere il conflitto tra le regole di confronto "AAAA" e "BBBB" nell'operazione equal to. Ma cosa ci dice questo errore? Dice che durante l'operazione di confronto di due colonne (equal to) si Γ¨ verificato un problema . Ma che tipo di problema? Un problema relativo alle regole di confronto! Le regole di confronto sono definite all'interno delle collation. Per capire meglio facciamo un esempio Creiamoci una tabella con la collate standard del nostro database e riempiamola con qualche dato. P.S. Per vedere qual'Γ¨ la collate del nostro sistema Γ¨ sufficiente eseguire: SELECT SERVERPROPERTY('collation'); ...

Andare in debug su una Stored Procedure

Image
Ciao a tutti, In questo post rispondiamo ad un domanda che mi hanno fatto proprio oggi! Vediamo come si fa ad andare in debug dentro ad una stored procedure di SQL . Facciamo un esempio.   Creiamoci una semplice stored procedure giusto per mostrare il concetto eseguendo questa Query: CREATE PROCEDURE SP_SELEZIONA_CLIENTI AS PRINT 'A' PRINT 'B' PRINT 'C' GO;   Scriviamo poi il comando per poterla eseguire: EXEC SP_SELEZIONA_CLIENTI Ora selezioniamola ... ... ed eseguiamola premendo il tasto DEBUG . La schermata diventerΓ  cosΓ¬: Premete ora il tasto F11 (esegui istruzione) Et voilΓ ... Si aprirΓ  un altra finestra con il codice sorgente della nostra stored procedure:   Ora per andare in debug fare tasto destro dopo essersi posizionati sul testo in giallo. ApparirΓ  il menΓΉ e scegliere la voce "Esegui fino al cursore" Alla prossima ! P.S.Purtroppo con l'uscita dell'ultima versione del SQL Server ...

"INSERT di SELECT TOP(1) * FROM" vs. "INSERT TOP(1) di SELECT * FROM" + QUIZ

Image
Ciao a tutti!   Oggi volevo parlare di INSERT DI SELECT in abbinamento all'operatore TOP. Ma sorpresa... vi lascerΓ² con un quesito al quale chi mi saprΓ  rispondere avrΓ , come ambitissimo premio, "gli onori della cronaca" con la citazione nel mio prossimo articolo!! Ho preparato un esempio che dovrebbe rendere abbastanza agevole rispondere al quesito! Ma partiamo. Supponiamo di dover inserire nella TABELLA_B alcuni record della TABELLA_A. Utilizzando l'operatore TOP ci sono in realtΓ  due modi diversi. Possiamo scrivere la nostra stringa SQL cosΓ¬: INSERT INTO TABELLA_B (...) SELECT TOP(1) .... FROM TABELLA_A Oppure cosΓ¬: INSERT TOP(1) INTO TABELLA_B (...) SELECT .... FROM TABELLA_A Vediamo di creare un esempio ad hoc creandoci alcune tabelle tramite questi script: create table elenco (idscarpe int, price float) create table Scarpe (id int identity(1,1), ProductCode varchar(80)) Create clustered index idx_Clustered_Scarpe_id on Scarpe (id) set iden...

Query SARGABLE parte 2. Esempi

Image
Ciao Ragazzi, Oggi torniamo sulle Query SARGABLE. Facciamo alcuni esempi di Query che sono SARGABLE e di Query che non lo sono! Se vi siete persi la prima "puntata" Γ¨ ancora non sapete l'importanza delle Query SARGABLE leggete prima il mio precedente articolo:  Scrivere Query performanti ...la tua Query Γ¨ SARGABLE?   Siete pronti!  Via! Creiamoci una semplice tabella di prova e riempiamola con un po di dati: CREATE TABLE ELENCO (ID INT IDENTITY(1,1), CODICE VARCHAR(3) CONSTRAINT PK_Elenco_ID PRIMARY KEY CLUSTERED (id)) Il campo ID Γ¨ autoincrementante ed Γ¨ l'indice clustered. Come primo esempio , scriviamo una delle Query piΓΉ semplici SELECT ID FROM ELENCO WHERE ID = 5 Vediamo il piano di esecuzione: Come ci aspetteremmo per estrarre il dato voluto viene utilizzato l'indice clustered e viene effettuata una operazione di SEEK. Ora cambiamo leggermente la Query: SELECT ID FROM ELENCO WHERE ID + 1 = 5 Gua...