|
|
Transact SQL Guida pratica I Portatili
|
| Editore | Mondadori Informatica |
| Autore | Ben-Gan Itzik, Moreau Tom |
| Titolo originale | Advanced Transact-SQL for SQL Server 2000 |
| Editore originale | Apress |
| Collana | I portatili |
| Pagine | 565 |
| Volumi | 1 |
| Livello | Intermedio-Avanzato |
| Lingua | Italiano |
| Data pubblicazione | 10 - 2006 |
| ISBN | 8861140068 |
|
|
| Prezzo di copertina |
| Euro 12,50 |
|
Presentazione xiii
Gli autori xiv
Prefazione xv
Introduzione xxiv
Capitolo 1 Join in T-SQL 1
E da quel momento furono in due... 1
Esempio di una società manifatturiera di lattice 2
Inner Join 4
Sintassi di Join Vecchio Stile SQL-89 4
Inner Join SQL 89 a Due Vie Vecchio Stile 4
Sintassi di JOIN SQL-92 5
Inner Join SQL-92 a Due Vie 6
Inner Join SQL-89 a Tre Vie Vecchio Stile 6
Inner Join SQL-92 a Tre Vie 7
Ordine delle Tabelle nella Join 8
Cross Join 8
Outer Join 10
Outer Join Vecchio Stile 10
Left Outer Join Vecchio Stile a Due Vie 10
Outer Join SQL-92 a Due Vie 11
Left Outer Join SQL-92 a Due Vie 12
Right Outer Join Vecchio Stile a Due Vie 12
Right Outer Join SQL-92 a Due Vie 13
Full Outer Join SQL-92 a Due Vie 13
Outer Join SQL-92 a Tre Vie 14
Il Catch 16
Controllare l’ordine del processo di join 19
Self e non-equal join 22
Lo Scenario Dating Service 22
Lo scenario Livelli di Salario 26
Utilizzo delle join per la modifica dei dati 27
Utilizzo delle Join per la Cancellazione dei Dati 28
Utilizzo delle Join per l’Aggiornamento Dati 29
Considerazioni sulle prestazioni 30
Criteri di filtraggio Completamente Qualificati 30
Join Hints 31
Linee Guida per le prestazioni 32
Puzzle SQL 1-1: Join 32
Capitolo 2 Subquery e tabelle derivate 33
Capire le subquery 33
Generare subquery scalari nidificate 33
Usare il predicato IN come subquery 35
Usare le subquery correlate 36
Usare predicati di quantificazione 42
Calcolare totali “al volo” 47
Generare tabelle derivate 48
Usare una SELECT con GROUP BY come tabella derivata 48
Trovare righe doppie in una tabella 50
Aggiornare righe con una clausola GROUP BY 51
Usare UNION in tabelle derivate 52
Generare istogrammi 53
Confrontare le prestazioni 54
Puzzle SQL 2-1: Interessi bancari 59
Puzzle SQL 2-2: Gestione Ordini e relativi pagamenti 60
Puzzle SQL 2-3: Trovare messaggi non letti 62
Capitolo 3 Popolare le tabelle 65
Utilizzare l’istruzione INSERT 65
Usare l’Istruzione INSERT DEFAULT VALUES 67
Utilizzare l’Istruzione INSERT VALUES 68
Usare l’istruzione INSERT SELECT 69
Default influenti 70
Utilizzare l’Istruzione INSERT EXEC 71
Utilizzare l’istruzione SELECT INTO 72
Il bulk copy program – bcp 75
Utilizzare l’istruzione BULK INSERT 75
BATCHSIZE 76
CHECK_CONSTRAINTS 76
CODEPAGE 76
DATAFILETYPE 77
FIELDTERMINATOR 77
FIRETRIGGERS 77
FIRSTROW 78
FORMATFILE 78
KEEPIDENTITY 78
KEEPNULLS 78
KILOBYTES_PER_BATCH 78
LAST_ROW 78
MAXERRORS 78
ORDER 78
ROWS_PER_BATCH 78
ROWTERMINATOR 79
TABLOCK 79
Caricamento dei dati 79
Normalizzazione dei Dati 80
Generare dati di test 84
SQL Puzzle 3-1: popolare la tabella customers 88
Capitolo 4 Altri problemi nella manipolazione dei dati 89
Far leva sulle espressioni CASE 89
Utilizzare l’espressione CASE semplice 89
Utilizzare l’Espressione CASE ricercata 91
Determinare il vostro genere di ordinamento 92
Creare Update con l’espressione CASE 93
Creare Tabelle Pivot 93
Creare query TOP 95
Utilizzare l’opzione TOP n 95
Usare l’opzione WITH TIES 96
Utilizzare l’opzione TOP n PERCENT 98
Utilizzare l’opzione SET ROWCOUNT 98
Utilizzare espressioni logiche e operazioni Bitwise 100
Utilizzare le espressioni logiche 100
Utilizzare le operazioni Bitwise 107
Precedenze tra gli operatori 115
Visualizzare gli zero iniziali 117
Trattare le date 118
Usare DATEPART () e YEAR(), MONTH(), e DAY() 118
Usare la funzione DATENAME() 119
Usare la funzione DATEADD() 120
Usare la funzione DATEDIFF() 120
Evitare le trappole della clausola WHERE durante
la manipolazione di una data 120
Usare la funzione CONVERT() 121
Trovare il primo giorno del mese 123
Trovare l’ultimo giorno del mese 123
Aggiungere mesi ad una data 123
Trovare il nome del mese basandosi sul numero del mese 124
Trattare Input di date indipendentemente dalla lingua 124
Usare la funzione GETUTCDATE() 125
SQL Puzzle 4-1: tema euro 2000 (posto da Colin Rippey) 125
Capitolo 5 Riassumere i dati 127
Raffinare le vostre query GROUP BY 127
CUBE 130
ROLLUP 138
Meglio CUBE oppure ROLLUP? 142
Eseguire o non eseguire una CUBE 143
COMPUTE 149
Usare l’opzione COMPUTE 149
Usare l’opzione COMPUTE BY 150
Considerazioni sulla COMPUTE 153
SQL Puzzle 5-1: livelli di management 153
Capitolo 6 Datatype e proprietà speciali 155
Usare datatype unicode 155
Usare il datatype rowversion 156
Usare i datatype text, ntext e image 158
Usare Text in row 159
Usare la stored procedure sp_invalidate_textptr 160
Usare indicatori text e le funzioni TEXTPTR() e TEXTINVALID 161
Usare l’istruzione READTEXT 161
Usare L’istruzione WRITETEXT 162
Usare l’istruzione UPDATETEXT 163
Usare SET TEXTSIZE 165
Usare il datatype bigint 165
Usare il datatype uniqueidentifier 166
Usare il tipo di dato sql_variant 167
Usare la funzione SQL_VARIANT_PROPERTY() 169
Usare il datatype table 171
Usare la proprietà IDENTITY e la funzione IDENTITY() 172
Usare la proprietà IDENTITY 172
Creare tabelle con colonne IDENTITY e farne delle query 172
Usare l’opzione di sessione IDENTITY_INSERT 175
Che cosa ho appena inserito? 176
Usare DBCC CHECKIDENT 179
Usare la funzione IDENTITY() 180
SQL PUZZLE 6-1: clienti con e senza vendite 183
Capitolo 7 Scrittura del codice in Transact-SQL 185
Lavorare con le variabili 185
Assegnazione dei valori con SET e SELECT 186
Controllo del flusso 189
Il costrutto IF ELSE 189
Il Costrutto WHILE 191
Trattamento degli errori 192
Gestione dei messaggi di errore 193
Evidenza degli errori 195
Elaborazione dei batch 199
Commento del codice 200
Stili di codifica 201
Lo stile di Tom 201
Lo stile di Itzik 202
Altri stili 203
Uso delle transazioni 203
Uso delle transazioni implicite 205
Capire i deadlock 205
Capire le transazioni nidificate e @@TRANCOUNT 206
Azione dei savepoint 206
SQL Puzzle 7-1: Eliminazione di una Transazione esplicita 207
Capitolo 8 View 209
Limitazioni e requisiti delle view 209
Ogni colonna deve avere un nome e il nome deve essere unico 209
Non è possibile usare SELECT INTO in una view 212
Non è possibile usare la clausola ORDER BY in una view 212
Nascondere la complessità della query sottostante 214
Usare le view come un meccanismo di sicurezza 216
Alterare una view 217
Criptare la definizione della view 219
Usare l’opzione SCHEMABINDING 220
Usare le view per modificare i dati 221
Usare l’opzione CHECK 222
Limitazioni alla modifica dei dati attraverso le view 224
Aggiornare le view attraverso SQL Server Enterprise Manager 228
View indicizzate in SQL Server 2000 230
Messa a punto senza view indicizzate 230
Messa a punto con view indicizzate 233
Usare Index Tuning Wizard per mettere a punto le view indicizzate 236
Puzzle SQL 8-1: view ordinata aggiornabile (di Zoltan Kovacs) 242
Capitolo 9 Stored Procedures 243
L’istruzione CREATE PROCEDURE 244
L’istruzione ALTER PROCEDURE 248
L’istruzione DROP PROCEDURE 248
Chiamare una Stored Procedure 248
Referenziare una stored procedure 251
Chiamare una stored procedure con un parametro di output 251
Usare WITH RECOMPILE 252
Usare i codici di ritorno e l’istruzione RETURN 255
Azionare l’esecuzione dinamica con l’istruzione EXEC() 257
Azionare l’esecuzione dinamica con sp_executesql 258
Istruzioni SET 261
NOCOUNT 261
ANSI_DEFAULTS 261
TRANSACTION ISOLATION LEVEL 262
LOCK_TIMEOUT 263
QUERY_GOVERNOR_COST_LIMIT 264
Stored procedures di sistema 264
Utili stored procedures di sistema 264
Creare stored procedures di sistema 266
Creare delle stored procedures temporanee 267
Nidificare le stored procedures 268
Ricorsività 268
Sicurezza e stored procedures 269
Risoluzione differita dei nomi 271
Istruzioni vietate all’interno di una stored procedure 272
Transazioni e stored procedures 272
Puzzle SQL 9-1: creare una stored procedure all’interno
di una stored procedure 274
Puzzle SQL 9-2: creare automaticamente delle stored procedures 274
Capitolo 10 Trigger – le Stored Procedure nascoste 275
Come usare l’istruzione CREATE TRIGGER 276
L’istruzione ALTER TRIGGER 277
Come si usa l’istruzione DROP TRIGGER 278
Le tabelle deleted e inserted 278
Come innescare i trigger 279
Primi e ultimi trigger 280
Ottimizzazione delle prestazioni dei Trigger 280
Come si aziona @@ROWCOUNT 281
Come si usano le funzioni IF UPDATE() e IF COLUMNS_UPDATED() 281
Altri problemi del locking 283
Come disattivare trigger e constraint 284
Come usare i trigger con ROLLBACK TRANSACTION 285
Come si usano @@IDENTITY() e SCOPE_IDENTITY() con i trigger 286
Comprendere i trigger AFTER 288
Comprendere i trigger INSTEAD OF 292
Come usare i trigger per una revisione 298
Come conservare l’immagine precedente 298
Come conservare tutte le immagini 300
Revisione dei dati aggiornati per ultimi – Quando e Da chi 301
Istruzioni non consentite all’interno di un trigger 302
SQL Puzzle 10-1: Delete non risolti 302
Capitolo 11 Funzioni definite dall’utente 305
Funzioni scalari 305
Funzioni inline valutate a livello di tabella 312
Funzioni valutate a livello di tabella con più istruzioni 315
Funzioni di sistema definite dall’utente 318
Funzioni di sistema definite dall’utente predefinite 318
Come si creano le proprie funzioni di sistema definite dall’utente 321
Altri problemi riguardanti le funzioni definite dall’utente 323
Uso di valori di default 323
Limiti delle funzioni definite dall’utente 324
Determinismo, collegamento di schemi, partecipazione a constraint e indici 324
Comprendere la ricorsività e la risoluzione differita di un nome 329
Come ottenere informazioni riguardo alle funzioni definite dall’utente 332
Come criptare il codice delle funzioni definite dall’utente 332
Uso di funzioni definite dall’utente per manipolare numeri complessi 332
Cos’è un numero complesso? 333
Perché usare i numeri complessi in T-SQL? 334
Convalidare, rappresentare ed estrarre le parti di numeri complessi 334
Algebra complessa, geometria e operazioni aritmetiche 340
Forme polari dei numeri complessi e calcolo delle dimensioni di un vettore 348
Puzzle SQL 11-1: come formattare delle date 354
Capitolo 12 Tabelle temporanee 357
Comprendere gli oggetti temporanei 357
Creazione di tabelle temporanee 358
Creazione di tabelle temporanee locali 358
Creazione di tabelle temporanee globali 359
Uso di tabelle temporanee 360
Come evitare lavoro ripetitivo utilizzando una tabella temporanea 360
Uso di una tabella temporanea per gestire anomale regole di business 371
Uso di tabelle temporanee per comunicare con l’istruzione EXEC() 373
Eliminazione di duplicati con e senza le tabelle temporanee 374
Puzzle SQL 12-1: creazione di una tabella temporanea e di soluzione senza cursore 377
Capitolo 13 View partizionate orizzontalmente 379
Partizionamento di view prima del SQL Server 2000 379
Installazione di view locali partizionate orizzontalmente 380
Modifica di view locali partizionate orizzontalmente 382
Come si pongono delle query alle view locali partizionate orizzontalmente 384
Nuove caratteristiche relative al partizionamento nel SQL Server 2000 387
View partizionate orizzontalmente distribuite (confederate) 387
Capitolo 14 Implementare l’integrità referenziale
e le azioni in cascata 417
Gli scenari di relazione 417
Le tabelle Orders e OrderDetails 418
La tabella Employees 419
Metodi di rafforzamento dell’integrità referenziale 421
Implementare le operazioni in cascata usando una FOREIGN KEY 421
NO ACTION (restrict) 421
CASCADE 423
SET NULL e SET DEFAULT 427
Implementare azioni in cascata usando le stored procedures 428
Cancellare una riga nella tabella primaria 428
Aggiornare una riga nella tabella primaria 429
Inserire una riga nella tabella primaria 430
Inserire, aggiornare e cancellare una riga nella tabella secondaria 431
Incapsulare la logica 432
Implementare operazioni in cascata usando i trigger 433
Usare i trigger prima di SQL Server 2000 433
Usare i trigger in SQL Server 2000 451
Puzzle SQL 14-1: implementare operazioni in cascata 455
Capitolo 15 Cursori lato server, l’SQL dell’ultima spiaggia 459
Le 5 principali ragioni per cui vengono usati i cursori 459
Implementare i cursori 461
Usare l’istruzione DECLARE 461
Usare l’istruzione OPEN 464
Usare l’istruzione FETCH 464
Usare le Istruzioni UPDATE o DELETE 466
Usare l’istruzione CLOSE 466
Usare l’istruzione DEALLOCATE 466
Usare le variabili cursore con stored procedures 467
Minimizzare i locking 468
Opzioni Server 468
Le opzioni di database 468
Cursore Close on Commit 468
Impostare i cursori come local per default 469
Impostare le Opzioni Database 469
Usare i cursori su chiamate di stored procedure 469
Far lavorare un cursore - un esempio pratico 470
Alternative SQL ai cursori 472
Cicli WHILE 474
Stored procedures utili 478
Stored Procedures Ancillari 479
Best Practices 479
SQL Puzzle 15-1 : Schema di sconti 480
Capitolo 16 Espandere le gerarchie 481
Rappresentazione di struttura gerarchica in un database relazionale 481
Creare la Tabella Employees 481
Eseguire Query sulla Tabella Employees 484
Domande Problematiche 487
Fornire una Soluzione Aggiungendo Informazioni alla Tabella 487
Una Soluzione self-maintained 488
Rispondere alle Domande Problematiche 496
Rispondere alle Domande con Funzioni User-Defined 502
Mantenere la Modifica dei Dati 504
Rimuovere Impiegati 507
Implementazione pratica 511
Ripopolare la Tabella Employees 511
Utilizzare gli Indici ed Eseguire i Test di Performance 513
SQL Puzzle 16-1: Funzioni hierarchies e user-defined 521
Capitolo 17 Suggerimenti e trucchi 523
Disimparare un vecchio trucco 523
Avere i NULL ordinati per ultimi anziché per primi 524
Usare un parametro per la colonna nella clausola ORDER BY (by Bruce P. Margolin) 526
Usare il numero di colonna come parametro e CASE
per determinare la colonna 526
Usare una esecuzione dinamica 528
Usare il nome colonna come parametro e CASE per determinare la colonna 529
Formattare un output che può essere NULL (di Robert Skoglund) 529
Includere rowset di stored procedure nelle istruzioni SELECT e SELECT INTO 530
Usare l’istruzione INSERT EXEC 531
Usare la funzione OPENROWSET() 532
Usare la funzione OPENQUERY() 532
Usare OPENROWSET() in una View 533
Scegliere tra SQL e OPENQUERY() 534
Usare CASE in una JOIN (di Robert Vieira) 535
Usare COALESCE() con una LEFT JOIN 537
Ricerche Case-Sensitive (di Umchandar Jayachandran) 538
Ottenere i corretti valori dalle funzioni @@ 539
Usare PWDCOMPARE() e PWDENCRYPT() nell’SQL Server 6.5 e 7.0 (by Brian Moran) 542
Creare Views ordinate 545
Ottenere righe in ordine 545
Ottenere le Righe da m a n 545
Ottenere le prime n righe per ogni occorrenza di... 548
I Paesi migliori per impiegato 551
Siete stati serviti? 552
Puzzle SQL 17-1: Top Gun: Il Meglio del Meglio 555
Puzzle 17-2: Riempire una tabella con dati di un Quadrato Magico in T-SQL 555
Che cosa è un Quadrato Magico? 555
Rappresentare un Quadrato Magico in una tabella 556
Puzzle SQL 17-2-1: Riempire una tabella con i dati di un Quadrato Magico in T-SQL 557
Puzzle SQL 17-2-2: Visualizzare il Quadrato Magico come tabella incrociata 557
Puzzle SQL 17-2-3: Verificare se la tabella rappresenta correttamente un quadrato magico 558
Capitolo 18 Soluzioni dei Puzzle SQL (disponibile sul sito Web)
Puzzle SQL 1: joins
Puzzle SQL 2-1: interessi bancari
Puzzle SQL 2-2: gestione ordini e relativi pagamenti
Puzzle SQL 2-3: trovare messaggi non letti
Puzzle SQL 3-1: popolare la tabella Customers
Puzzle SQL 4-1: il tema Euro 2000
Puzzle SQL 5-1: livelli di gestione
Puzzle SQL 6-1: clienti con e senza vendite
Puzzle SQL 7-1: eliminare una transazione esplicita
Puzzle SQL 8-1: view ordinata aggiornabile
Puzzle SQL 9-1: creare una stored procedure dentro ad una stored procedure
Puzzle SQL 9-2: creazione automatica di stored procedure
Puzzle SQL 10-1: cancellazioni pendenti
Puzzle SQL 11-1: formattare le date
Puzzle SQL 12-1: creare una tabella temporanea e una soluzione senza cursori
Puzzle SQL 14-1: implementare operazioni a catena
Puzzle SQL 15-1: schema di sconto
Puzzle SQL 16-1: gerarchie e funzioni user-defined
Puzzle SQL 17-1: top gun: il meglio del meglio
Puzzle SQL 17-2-1: riempire una tabella con i dati di un quadrato magico
Puzzle SQL 17-2-2: visualizzare il quadrato magico come tabella incrociata
Puzzle SQL 17-2-3: verificare se la tabella rappresenta correttamente un quadrato magico
Indice analitico 559
|
|
|
|