Introduction |
Relational Database Management Systems and SQL Server / 1: |
Database Models |
The Relational Model |
A Brief History of SQL Server |
Basics of SQL Server Architecture |
Server Components |
Client Tools |
Database Components (Objects) |
Security Model |
Client/Server Applications Design |
Elements of Transact-SQL / 2: |
Data Definition Language (DDL) |
Rules for Identifiers |
Transact-SQL Programming Conventions |
Data Manipulation Language (DML) |
Data Control Language (DCL) |
Data Types |
Creating Customized Data Types: User-Defined Data Types |
Data Type Selection Criteria |
Additional Elements |
Variables |
Operators |
Control of Flow Statements |
Comments |
Programming Scripts and Batches |
The GO Statement |
Working with Tables and Views / 3: |
Creating and Altering Tables |
Types of Tables |
Creating Tables |
Altering a Table's Definition |
Creating and Altering Views |
Benefits of Views |
Creating and Dropping Views |
Altering a View's Definition |
Querying and Modifying Data / 4: |
Querying Data |
The SELECT Statement |
The FROM Clause |
The WHERE Clause |
Data Aggregation and the GROUP BY Clause |
The ORDER BY Clause |
The TOP N Clause |
Using Dynamic Queries |
Modifying Data |
The INSERT Statement |
The DELETE Statement |
The UPDATE Statement |
The SELECT INTO Statement |
Querying Multiple Tables: JOINS / 5: |
ANSI SQL-92 Syntax |
INNER JOIN |
OUTER JOINs |
RIGHT OUTER JOIN |
LEFT OUTER JOIN |
FULL OUTER JOIN |
CROSS JOINs |
Self Joins |
The UNION Operator |
Optimizing Access to Data: Indexes / 6: |
Introduction to Indexes |
Benefits of Indexes |
Using Indexes on Point Queries |
Using Indexes in Range Queries |
Using Indexes to Search for Foreign Key Values to Solve Join Operations |
Using Indexes to Speed Up the Execution of Hash and Merge JOIN Operations |
Using Indexes That Cover a Query |
Using an Index to Enforce Uniqueness |
Using Indexes to Help Produce Ordered Output |
How to Create Indexes |
How SQL Server 2000 Stores Data |
How SQL Server 2000 Modifies Data |
Index Enhancements in SQL Server 2000 |
Accessing Data Without Indexes: Table Scan |
Types of Indexes |
Clustered Indexes |
Nonclustered Indexes |
Covered Queries and Index Intersection |
Index Maintenance |
Rebuilding Indexes |
Index Fragmentation |
Index Statistics |
Getting Information About Indexes |
Indexes on Computed Columns |
Indexed Views |
Index Tuning Wizard |
Summary |
Enforcing Data Integrity / 7: |
Types of Data Integrity |
Domain Integrity |
Entity Integrity |
Referential Integrity |
User-Defined Integrity |
Enforcing Integrity: Constraints (Declarative Data Integrity) |
Primary Keys |
Unique Constraints |
Check Constraints |
Default Definitions |
Foreign Keys |
Cascading Operations: Cascaded Declarative Referential Integrity |
Transact-SQL-Specific Integrity Structures |
Implementing Business Logic: Programming Stored Procedures / 8: |
Benefits of Using Stored Procedures |
Types of Stored Procedures |
System Stored Procedures |
User-Defined Stored Procedures |
Temporary Stored Procedures |
Extended Stored Procedures |
Creating and Dropping Stored Procedures |
Using Parameters |
Altering Stored Procedure Definitions |
The Return Statement |
Executing Stored Procedures |
Using Query Analyzer's Object Browser to Execute Stored Procedures |
Stored Procedure Recompilation |
Handling Errors |
Nesting Stored Procedures |
Application Security Using Stored Procedures |
Implementing Complex Processing Logic: Programming Triggers / 9: |
Benefits of Triggers |
Using Triggers to Enforce Complex Domain Integrity |
Using Triggers to Maintain Denormalized Data |
Trigger Enhancements in SQL Server 2000 |
Inserted and Deleted Tables |
Types of Triggers According to Their Order |
Instead of Triggers |
After Triggers |
Creating and Dropping Triggers |
Deciding the Order of Execution |
Checking for Updates on Specific Columns |
Multiple-Row Considerations |
Altering Trigger Definitions |
Disabling Triggers |
Nesting Triggers |
Recursive Triggers |
Security Implications of Using Triggers |
Enforcing Business Rules: Choosing Among Instead of Triggers, Constraints, and After Triggers |
Enhancing Business Logic: User-Defined Functions (UDF) / 10: |
Benefits of User-Defined Functions |
Built-In User-Defined Functions |
Types of User-Defined Functions According to Their Return Value |
Scalar Functions |
Inline Table-Valued User-Defined Functions |
Table-Valued Functions |
Dropping User-Defined Functions |
Preventing the Alteration of Dependent Objects: The Schemabinding Option |
Deterministic and Nondeterministic Functions |
Altering User-Defined Functions Definition |
Security Implications of Using User-Defined Functions |
Applying User-Defined Functions |
Converting Stored Procedures into User-Defined Functions |
Converting Views into User-Defined Functions |
Using User-Defined Functions in Constraints |
Using Complex Queries and Statements / 11: |
Subqueries |
Scalar Subqueries |
List Subqueries |
Array Subqueries |
Correlated Subqueries |
Derived Tables |
The Case Function |
The Compute Clause |
The Cube and Rollup Operators |
Using Hints |
Row-Oriented Processing: Using Cursors / 12: |
Row-by-Row Versus Set-Oriented Processing |
Types of Cursors |
Forward-Only |
Static |
Dynamic |
Keyset-Driven Cursors |
Steps to Use Cursors |
Declaring Cursors |
Opening Cursors |
Fetching Rows |
Closing Cursors |
Deallocating Cursors |
Scope of Cursors |
Local Cursors |
Global Cursors |
Using Cursor Variables |
Using Cursors to Solve Multirow Actions in Triggers |
Application Cursors |
Maintaining Data Consistency: Transactions and Locks / 13: |
Characteristics of Transactions (ACID) |
Using Transactions |
Begin Tran |
Commit Tran |
Rollback Tran |
Using Implicit Transactions |
Transactions and Runtime Errors |
Concurrency Problems |
Lost Updates |
Uncommitted Dependency (Dirty Read) |
Inconsistent Analysis (Nonrepeatable Read) |
Phantom Reads |
Isolation Levels |
Read Committed |
Read Uncommitted |
Repeatable Read |
Serializable |
Types of Locks |
Shared Locks |
Exclusive Locks |
Update Locks |
Intent Locks |
Schema Locks |
Key-Range Locks |
A Serious Problem to Avoid: Deadlocks |
Transferring Data to and from SQL Server / 14: |
The Need for Transferring Data |
Tools for Transferring Data Using SQL Server 2000 |
The Bulk Insert Statement and bcp |
Using the bcp Command-Line Utility |
Using the Bulk Insert Statement |
Using Data Transformation Services |
Transfer Objects Between Two SQL Server 2000 Databases |
Export a SQL Server Table to an Access Database |
The Copy Database Wizard |
Working with Heterogeneous Environments: Setting Up Linked Servers / 15: |
Distributed Queries |
Ad Hoc Queries |
Linked Servers |
Distributed Transactions |
Using SQL Server Instances / A: |
Installing SQL Server Instances |
Connecting to Instances |
System Functions Used in Multi-Instance Installations |
Current Limitations |
Using SQL Query Analyzer / B: |
Installing SQL Query Analyzer |
The Query Analyzer Workplace |
The Editor Pane |
The Object Browser |
The Object Search |
The Results Pane |
Managing User and Connection Options |
Customizing SQL Query Analyzer |
Connection Settings |
Defining and Using Templates for Query Analyzer |
Analyzing Queries |
Obtaining Information About Query Execution |
Analyzing Query Execution Plan |
Managing Indexes from Query Analyzer |
Working with the Transact-SQL Debugger |
Index |
Introduction |
Relational Database Management Systems and SQL Server / 1: |
Database Models |
The Relational Model |
A Brief History of SQL Server |
Basics of SQL Server Architecture |