30
1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

Embed Size (px)

Citation preview

Page 1: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

1

SQL SERVER 2008 DEVELOPMENT

5 Day, Hands-On CourseAuthor

© David Ringsell28/01/08

Page 2: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

2

2. LANGUAGE FEATURES

SQL Server Programming ToolsElements of Transact-SQLSQL Server Object NamesAdditional Language Elements

Local Variables Operators Functions

Ways to Execute Transact-SQL StatementsNew Transact-SQL (T-SQL) Features

Page 3: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

3

SQL Server Programming Tools

SQL Server Management Studio Color-codes syntax elements automatically Multiple query windows Customizable views of result sets Graphical execution plans Execute portions of scripts

osql Utility Command-line utility

Page 4: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

4

The Transact-SQL Programming Language

SQL Server Implementation of Entry-Level ANSI ISO Standard

Can Be Run on Any Entry-Level Compliant Product

Contains Additional Unique Functionality

Page 5: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

5

Elements of Transact-SQL

Data Control Language Statements Data Definition Language

Statements Data Manipulation Language

StatementsSQL Server Object Names Naming Guidelines

Page 6: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

6

Data Control Language Statements

Set or Change Permissions GRANT DENY REVOKE

By Default, Only sysadmin, dbcreator, db_owner, and db_securityadmin Roles Can Execute

Page 7: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

7

Data Definition Language Statements

Define the Database Objects CREATE object_type object_name ALTER object_type object_name DROP object_type object_name

Page 8: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

8

Data Manipulation Language Statements

Use When Working with Data in the Database SELECT INSERT UPDATE DELETE

Page 9: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

9

SQL Server Object Names

Standard Identifiers First character must be alphabetic Other characters can include letters, numerals,

or symbols Identifiers starting with symbols have special

usesDelimited Identifiers

Use when names contain embedded spaces Use when reserved words are portions of

names Enclose in brackets ([ ]) or quotation marks ("

")

Page 10: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

10

Naming Guidelines

Use Meaningful Names Where PossibleKeep Names ShortUse a Clear and Simple Naming ConventionChose an Identifier That Distinguishes Types

of Objects Views Stored procedures

Keep Object Names and User Names Unique

Page 11: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

11

Additional Language Elements

Local VariablesOperatorsFunctionsFunction ExamplesControl of Flow Language ElementsComments

Page 12: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

12

Local Variables

User-defined with DECLARE Statement

Assigned Values with SET or Select StatementDECLARE @vLastName char(20),

@vFirstName varchar(11)SET @vLastName = 'Dodsworth'SELECT @vFirstName = FirstName

FROM Northwind..EmployeesWHERE LastName = @vLastName

PRINT @vFirstName + ' ' + @vLastNameGO

DECLARE @vLastName char(20),@vFirstName varchar(11)

SET @vLastName = 'Dodsworth'SELECT @vFirstName = FirstName

FROM Northwind..EmployeesWHERE LastName = @vLastName

PRINT @vFirstName + ' ' + @vLastNameGO

Page 13: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

13

Operators

Types of Operators Arithmetic Comparison String concatenation Logical

Operator Precedence Levels

Page 14: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

14

Functions Aggregate Functions

Scalar Functions

Rowset Functions

SELECT * FROM OPENQUERY (OracleSvr, 'SELECT ENAME, EMPNO FROM SCOTT.EMP')

SELECT * FROM OPENQUERY (OracleSvr, 'SELECT ENAME, EMPNO FROM SCOTT.EMP')

SELECT AVG (UnitPrice) FROM ProductsSELECT AVG (UnitPrice) FROM Products

SELECT DB_NAME() AS 'database'SELECT DB_NAME() AS 'database'

Page 15: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

15

Function Examples

SELECT 'ANSI:' AS Region, CONVERT(varchar(30), GETDATE(), 102) AS StyleUNIONSELECT 'European:', CONVERT(varchar(30), GETDATE(), 113)UNIONSELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111)

SELECT 'ANSI:' AS Region, CONVERT(varchar(30), GETDATE(), 102) AS StyleUNIONSELECT 'European:', CONVERT(varchar(30), GETDATE(), 113)UNIONSELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111)

Result

ANSI:ANSI:

European:European:

Japanese:Japanese:

StyleStyleStyleStyle

11

112000.03.222000.03.22

22 Mar 2000 14:20:00:01022 Mar 2000 14:20:00:010

2000/03/222000/03/22

RegionRegion

Page 16: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

16

Control of Flow Language Elements

Statement Level BEGIN…END blocks IF…ELSE blocks WHILE constructs

Row Level CASE expression

IF USER_NAME() <> 'dbo' BEGIN RAISERROR('Must be sysadmin to Perform Operation', 10, 1) RETURN ENDELSE DBCC CHECKDB(Northwind)

IF USER_NAME() <> 'dbo' BEGIN RAISERROR('Must be sysadmin to Perform Operation', 10, 1) RETURN ENDELSE DBCC CHECKDB(Northwind)

Page 17: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

17

CommentsIn-Line Comments

Block Comments

SELECT ProductName,(UnitsInStock + UnitsOnOrder) AS Max -- Calculates inventory, SupplierIDFROM Products

SELECT ProductName,(UnitsInStock + UnitsOnOrder) AS Max -- Calculates inventory, SupplierIDFROM Products

/* ** This code retrieves all rows of the products table ** and displays the unit price, the unit price increased ** by 10 percent, and the name of the product. */SELECT UnitPrice, (UnitPrice * 1.1), ProductName FROM Products

/* ** This code retrieves all rows of the products table ** and displays the unit price, the unit price increased ** by 10 percent, and the name of the product. */SELECT UnitPrice, (UnitPrice * 1.1), ProductName FROM Products

Page 18: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

18

Ways to Execute Transact-SQL Statements

Dynamically Constructing Statements

Using Batches Using Scripts Using Transactions Using XML

Page 19: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

19

Dynamically Constructing Statements

Use EXECUTE with String Literals and VariablesUse When You Must Assign Value of Variable at

Execution TimeAny Variables and Temporary Tables Last Only

During Execution

DECLARE @dbname varchar(30), @tblname varchar(30)SET @dbname = 'Northwind'SET @tblname = 'Products'

EXECUTE('USE ' + @dbname + ' SELECT * FROM '+ @tblname)

DECLARE @dbname varchar(30), @tblname varchar(30)SET @dbname = 'Northwind'SET @tblname = 'Products'

EXECUTE('USE ' + @dbname + ' SELECT * FROM '+ @tblname)

Page 20: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

20

Using Batches

One or More Transact-SQL Statements Submitted Together

Define a Batch by Using the GO Statement

How SQL Server Processes BatchesYou Cannot Combine Some Statements

in a Batch CREATE PROCEDURE CREATE VIEW CREATE TRIGGER CREATE RULE CREATE DEFAULT

Page 21: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

21

Using Scripts

Contain Saved StatementsCan Be Written in Any Text Editor

Save by using .sql file name extensionExecute in SQL Query Analyzer or

osql UtilityUse to Recreate Database Objects or

to Execute Statements Repeatedly

Page 22: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

22

Using Transactions

Processed Like a BatchData Integrity Is GuaranteedChanges to the Database Are Either

Applied Together or Rolled BackBEGIN TRANSACTIONUPDATE savings SET amount = (amount - 100) WHERE custid = 78910 … <Rollback transaction if error>UPDATE checking SET amount = (amount + 100) WHERE custid = 78910 … <Rollback transaction if error>COMMIT TRANSACTION

BEGIN TRANSACTIONUPDATE savings SET amount = (amount - 100) WHERE custid = 78910 … <Rollback transaction if error>UPDATE checking SET amount = (amount + 100) WHERE custid = 78910 … <Rollback transaction if error>COMMIT TRANSACTION

Page 23: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

23

New Transact-SQL (T-SQL)

Common Table Expressions (CTE) Useful for recursive queries

Ranking Functions RANK, DENSE_RANK, ROW_NUMBER, PARTITION BY

TOP(N) N can be a parameter or expression

APPLY Run a query for each row and merge results

PIVOT Rotate data into row headings

FOR XML PATH Easier control over XML result

Page 24: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

24

Try/Catch Error Handling

BEGIN TRY -- Statement with errorEND TRY

BEGIN CATCH SELECT ERROR_NUMBER() AS Number, ERROR_SEVERITY() AS Severity, ERROR_STATE() AS State, ERROR_PROCEDURE() AS procedureName, ERROR_LINE() AS Line, ERROR_MESSAGE() AS messageText;END CATCH

Page 25: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

25

EXECUTE AS

Used to specify security context under which stored procedure executes

WITH EXECUTE AS options: SELF the user who created the stored

procedure OWNER the owner of the stored procedure 'user_name' a specified user name

Page 26: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

26

Snapshot Isolation Level

New isolation level for transactionsNo locks placed when reading dataNo dirty reads

Always see the last committed valuesUses tempdb to store row versionsCan significantly improve

concurrency

Page 27: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

27

Running CLR Code in SQL Server 2008

Overcomes limitations of Transact-SQL by hosting the Common Language Runtime (CLR)

Good for processor-intensive code Transact-SQL best for DML

Use a .NET Framework language to write: Stored procedures User-defined functions Triggers User-defined types Aggregates

Page 28: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

28

Recommended Practices

Use ANSI SQL Syntax Use ANSI SQL Syntax

Keep Business Logic on the Server As Stored Procedures Keep Business Logic on the Server As Stored Procedures

Save Statements As Scripts and Comment Them Thoroughly Save Statements As Scripts and Comment Them Thoroughly

Format Transact-SQL Statements to Be Legible to Others Format Transact-SQL Statements to Be Legible to Others

Choose an Appropriate Naming ConventionChoose an Appropriate Naming Convention

Page 29: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

29

2. REVIEW

SQL Server Programming ToolsElements of Transact-SQLSQL Server Object NamesAdditional Language Elements

Local Variables Operators Functions

Ways to Execute Transact-SQL StatementsNew Transact-SQL (T-SQL) Features

Page 30: 1 SQL SERVER 2008 DEVELOPMENT 5 Day, Hands-On Course Author © David Ringsell 28/01/08

30

CHAPTER CONTENTS

1. SQL SERVER OVERVIEW2. LANGUAGE FEATURES3. DESIGN A DATABASE4. IMPLEMENT TABLES5. ACCESS AND MODIFY DATA6. IMPLEMENT VIEWS7. IMPLEMENT FUNCTIONS8. IMPLEMENT TRIGGERS9. IMPLEMENT STORED PROCEDURES10. INDEXING TABLES11. ACCESSING LINKED SERVERS12. TRANSACTIONS AND LOCKS