Top Banner
SQL Server 2008 for Developers UTS Short Course
72

SQL Server - Introduction to TSQL

May 08, 2015

Download

Education

Peter Gfader
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SQL Server - Introduction to TSQL

SQL Server 2008 for DevelopersUTS Short Course

Page 2: SQL Server - Introduction to TSQL

Specializes in

C# and .NET (Java not anymore)

TestingAutomated tests

Agile, ScrumCertified Scrum Trainer

Technology aficionado • Silverlight• ASP.NET• Windows Forms

Peter Gfader

Page 3: SQL Server - Introduction to TSQL

http://sharepoint.ssw.com.au/Training/UTSSQL/Pages/

Course Timetable Course Materials

Course Website

Page 4: SQL Server - Introduction to TSQL

Course OverviewSession

Date Time Topic

1Tuesday03-08-2010

18:00 - 21:00

SQL Server 2008 Management Studio

2Tuesday10-08-2010

18:00 - 21:00

T-SQL Enhancements

3Tuesday17-08-2010

18:00 - 21:00

High Availability

4Tuesday24-08-2010

18:00 - 21:00

CLR Integration

5Tuesday31-08-2010

18:00 - 21:00

Full-Text Search

Page 5: SQL Server - Introduction to TSQL

SQL Management Studio

SQL Configuration Manager

Consoles

SQLCMD PowerShell

SQL Profiler

SQL Database Tuning Advisor

Last Week

Page 6: SQL Server - Introduction to TSQL

1. How to setup maintenance plans over night

2. Database encryption

1. Data2. Source code (Stored procs)

3. Best practices

1. Typical maintenance plans2. Policies

Last Week - Additional

Page 7: SQL Server - Introduction to TSQL

1. Modify maintenance plan

2. 2nd page in wizard (new plan)

Page 9: SQL Server - Introduction to TSQL

http://ola.hallengren.com/

Steps• Backup• Integrity check • Index optimization

Solution used in• mission-critical environments in • many organizations.

Best practices - Maintenance

Page 10: SQL Server - Introduction to TSQL

Security Best Practices

http://download.microsoft.com/download/8/5/e/85eea4fa-b3bb-4426-97d0-7f7151b2011c/SQL2005SecBestPract.doc

Security Best Practices Checklist

http://technet.microsoft.com/en-us/library/cc966456.aspx

 

Best practices - Security

Page 11: SQL Server - Introduction to TSQL

Create a schema called SalaryCreate a table called Employees in SchemaCreate a user called ManagerGive only manager permission to update/insert/delete in schemaCreate a user called PeterGive Peter only read to schema (=salary)Create a user AliceDeny everything for Alice in Salary

Homework?

Page 12: SQL Server - Introduction to TSQL

New Data Types

Inline variable assignment

Table Value Parameters

DDL Triggers

CTE (Common Table Expressions)

TOP %, XML Queries

PIVOT/UNPIVOT

ADO.NET

Agenda

Page 13: SQL Server - Introduction to TSQL

bigint, int, smallint, tinyint

-2^63 ... 2^63-1 0..255

Bit (0 or 1)

decimal = numeric

Exact type Numbers -10^38 +1 ... 10^38 –

Money, smallmoney

accuracy to a ten-thousandth money unit Smallmoney = smaller money

Datatypes - Exact Numerics

Page 14: SQL Server - Introduction to TSQL

Floating point numeric data

float real

Datatypes – Approximate Numerics

Page 15: SQL Server - Introduction to TSQL

char

Fixed length

varchar

Variable length

Datatypes - text

Page 16: SQL Server - Introduction to TSQL

char, varchar, text

Ascii - 1 byte

nchar, nvarchar, ntext

Unicode - 2 bytes

binary, varbinary, image

Datatypes - text

Page 17: SQL Server - Introduction to TSQL

SQL 2008 now has the following data types to represent time:

DateTime SmallDateTime Date Time DateTime2 – really a BigDateTime

• Min Date is 1st Jan 0000• Max date 31st Dec 9999 – Y10K BUG!!

DateTimeOffset

Date and Time

Page 18: SQL Server - Introduction to TSQL

Date Time details

Data type Format Range Accuracy Storage size (bytes)

User-defined fractional second precision

Time zone offset

time hh:mm:ss[.nnnnnnn]

00:00:00.0000000 through 23:59:59.9999999

100 nanoseconds

3 to 5 Yes No

date YYYY-MM-DD0001-01-01 through 9999-12-31

1 day 3 No No

smalldatetime

YYYY-MM-DD hh:mm:ss

1900-01-01 through 2079-06-06

1 minute 4 No No

datetime YYYY-MM-DD hh:mm:ss[.nnn]

1753-01-01 through 9999-12-31

0.00333 second 8 No No

datetime2 YYYY-MM-DD hh:mm:ss[.nnnnnnn]

0001-01-01 00:00:00.0000000 through 9999-12-31 23:59:59.9999999

100 nanoseconds

6 to 8 Yes No

datetimeoffset

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm

0001-01-01 00:00:00.0000000 through 9999-12-31 23:59:59.9999999 (in UTC)

100 nanoseconds

8 to 10 Yes Yes

Page 19: SQL Server - Introduction to TSQL

cursor

table

Timestamp = rowversion

binary number Reflects data modifications

uniqueidentifier = Guid

Format: 04c4ce04-16c1-406f-a895-5dd321db7f0b

Datatypes - Other

Page 20: SQL Server - Introduction to TSQL

Filestream

Sparse Columns

Filtered Indexes

Spatial Data

HierarchyID

DATE and TIME data types

New Data Types

Page 21: SQL Server - Introduction to TSQL

I am designing an Employee table that needs to cater for employee photographs. What should I do?

Example: Storing images

Page 22: SQL Server - Introduction to TSQL

I am designing an Employee table that needs to cater for employee photographs. What should I do?

You can store the image in the database (blob)You can store a URL to the image in the database (Recommended for SQL2005)

http://www.ssw.com.au/ssw/standards/Rules/RulestoBetterSQLServerdatabases.aspx#ImageReplaceWithURL

blob vs. file system

Page 23: SQL Server - Introduction to TSQL

You can store the image in the database (blob)

Database grows really bigBackups take longerYour code needs to convert the bytes back into an imageYour images are in sync with your data

blob

Page 24: SQL Server - Introduction to TSQL

You can store a URL to the image in the database (Recommended for SQL2005)

Database is smallerEasily validate or change the image (you can look at it on the file system)Data could become out of sync with the file systemNeed to backup the database and the file system

File system

Page 25: SQL Server - Introduction to TSQL

Filestream to the rescue

Implemented as a special varbinary(max) where data is stored as a blob on the file systemAllows you to have transactionally consistentIntegrated backup and restore of your binary imagesSize limitation is the size of your hard drive’s free space

Filestream

Page 26: SQL Server - Introduction to TSQL

Q:\ I’ve got an Contacts table with 200,000 rows. To support the latest Web 2.0 trends we want to also record the contact’s blog address. What should I do?

Problem

Page 27: SQL Server - Introduction to TSQL

A:\ Just add a new BlogUrl column in

Solution?

Page 28: SQL Server - Introduction to TSQL

A:\ Just add a new BlogUrl column in

Q:\ What’s the problem with that?

A:\ Most of the entries in your table will be null, it wastes a lot of database space

Solution?

Page 29: SQL Server - Introduction to TSQL

Use a sparse column

These columns are new to SQL 2008 They are optimized for storing NULL values

Solution

Page 30: SQL Server - Introduction to TSQL

Sparse ColumnsData type Nonsparse bytes Sparse bytes NULL percentage

bit 0.125 4.125 98%

tinyint 1 5 86%

smallint 2 6 76%

int 4 8 64%

bigint 8 12 52%

real 4 8 64%

float 8 12 52%

smallmoney 4 8 64%

money 8 12 52%

smalldatetime 4 8 64%

datetime 8 12 52%

uniqueidentifier 16 20 43%

date 3 7 69%

Page 31: SQL Server - Introduction to TSQL

Sparse ColumnsData type Nonsparse bytes Sparse bytes NULL Percentage

datetime2(0) 6 10 57%

datetime2(7) 8 12 52%

time(0) 3 7 69%

time(7) 5 9 60%

datetimetoffset(0) 8 12 52%

datetimetoffset (7) 10 14 49%

decimal/numeric(1,s)

5 9 60%

decimal/numeric(38,s)

17 21 42%

vardecimal(p,s) Use the decimal type as a conservative estimate.

Page 32: SQL Server - Introduction to TSQL

Sparse ColumnsData type Nonsparse bytes Sparse bytes NULL Percentage

sql_variant Varies with the underlying data type

varchar or char 4+avg. data 2+avg. data 60%

nvarchar or nchar 4+avg. data 2+avg. data 60%

varbinary or binary 4+avg. data 2+avg. data 60%

xml 4+avg. data 2+avg. data 60%

hierarchyId 4+avg. data 2+avg. data 60%

Page 33: SQL Server - Introduction to TSQL

Allows you to add an index to a column with a where clause

Useful for indexing columns with null values in them

Filtered Indexes

Page 34: SQL Server - Introduction to TSQL

Geometry

Geography

Virtual Earth Integration

Planar vs Geodetic Algorithms

Separate install for spatial assemblies

http://www.conceptdevelopment.net/Database/Geoquery/

Spatial Data Types

Page 35: SQL Server - Introduction to TSQL

Spatial Datatypes Hierarchy

Page 36: SQL Server - Introduction to TSQL

Geometry allows you to represent and process polygons

Spatial Data Types

Page 37: SQL Server - Introduction to TSQL

Employee with a ManagerID column (self join)

New HierarchyID data type

Can be indexed using:• Depth First • Breadth First

How do I represent an Org Chart?

Page 38: SQL Server - Introduction to TSQL

A depth-first index, rows in a subtree are stored near each other. For example, all employees that report through a manager are stored near their managers' record.

Depth First Search

Page 39: SQL Server - Introduction to TSQL

A breadth-first stores the rows each level of the hierarchy together. For example, the records of employees who directly report to the same manager are stored near each other.

Breadth First Search

Page 40: SQL Server - Introduction to TSQL

Instead of:

DECLARE @myVar intSET @myVar = 5

You can:

DECLARE @myVar int = 5

Inline Variable Assignment

Page 41: SQL Server - Introduction to TSQL

Pass in a table as an argument to a SPROC

Instead of:

exec sp_MySproc 'murphy,35;galen,31;samuels,27;colton,42‘

SPROC needs to then parse that string

Table Value Parameters

Page 42: SQL Server - Introduction to TSQL

You can do this instead

CREATE TYPE PeepsType AS TABLE (Name varchar(20), Age int) DECLARE @myPeeps PeepsType INSERT @myPeeps SELECT 'murphy', 35 INSERT @myPeeps SELECT 'galen', 31 INSERT @myPeeps SELECT 'samuels', 27 INSERT @myPeeps SELECT 'colton', 42exec sp_MySproc2 @myPeeps

Table Value Parameters

Page 43: SQL Server - Introduction to TSQL

The SPROC would look like this:

CREATE PROCEDURE sp_MySproc2(@myPeeps PeepsType READONLY)

Table Value Parameters

Page 44: SQL Server - Introduction to TSQL

Auditing, regulating schema changes, capture events on create_table, alter_procedure, drop_login etc

DDL Triggers

Page 45: SQL Server - Introduction to TSQL

PIVOT

Page 46: SQL Server - Introduction to TSQL

CTE (Common Table Expression) Before

Page 47: SQL Server - Introduction to TSQL

CTE (Common Table Expressions) After

Page 48: SQL Server - Introduction to TSQL

ROW NUMBER – see example

TRY/Catch in queries – see example

Top % WITH TIES

select top with tie feature( if top 10 and there are 15 that match number 10 will bring back all 15)

More features

Page 49: SQL Server - Introduction to TSQL

SELECT TOP 3 Person.FirstName, Person.LastName, PersonPhone.PhoneNumber

FROM AdventureWorks.Person.Person

INNER JOIN AdventureWorks.Person.PersonPhone ON

PersonPhone.BusinessEntityID = Person.BusinessEntityID

FOR XML RAW

Working with XML - RAW

Page 50: SQL Server - Introduction to TSQL

<row FirstName="Ken" LastName="Sánchez" PhoneNumber="697-555-0142"/>

<row FirstName="Terri" LastName="Duffy" PhoneNumber="819-555-0175"/>

<row FirstName="Roberto" LastName="Tamburello" PhoneNumber="212-555-0187"/>

Working with XML - RAW

Page 51: SQL Server - Introduction to TSQL

What happened to our relationships?

RAW doesn’t show our table relationships but gives us a flat XML hierarchy

Working with XML - RAW

Page 52: SQL Server - Introduction to TSQL

SELECT TOP 3 Person.FirstName, Person.LastName, PersonPhone.PhoneNumber

FROM AdventureWorks.Person.Person

INNER JOIN AdventureWorks.Person.PersonPhone ON

PersonPhone.BusinessEntityID = Person.BusinessEntityID

FOR XML AUTO

Working with XML - Auto

Page 53: SQL Server - Introduction to TSQL

<AdventureWorks.Person.Person FirstName="Ken" LastName="Sánchez">

<AdventureWorks.Person.PersonPhone PhoneNumber="697-555-0142"/>

</AdventureWorks.Person.Person>

Working with XML - Auto

Page 54: SQL Server - Introduction to TSQL

Great, but what if I needed to format the XML to output into a certain schema

Working with XML - Auto

Page 55: SQL Server - Introduction to TSQL

SELECT TOP 3

1 AS TAG,

NULL AS PARENT,

BusinessEntityID AS [Person!1!BusinessEntityID],

FirstName AS [Person!1!FirstName!ELEMENT]

FROM AdventureWorks.Person.Person

FOR XML EXPLICIT

Working with XML - Explicit

Page 56: SQL Server - Introduction to TSQL

<Person BusinessEntityID="285“>

<FirstName>Syed</FirstName>

</Person>

<Person BusinessEntityID="293">

<FirstName>Catherine</FirstName>

</Person>

<Person BusinessEntityID="295">

<FirstName>Kim</FirstName>

</Person>

Working with XML - Explicit

Page 57: SQL Server - Introduction to TSQL

Can control how the XML gets output

Ugly query

Is there a better way?

Working with XML - Explicit

Page 58: SQL Server - Introduction to TSQL

SELECT TOP 3

BusinessEntityID "Person/@BusinessEntityID",

FirstName "Person/FirstName"

FROM AdventureWorks.Person.Person

FOR XML PATH ('')

Working with XML - PATH

Page 59: SQL Server - Introduction to TSQL

XQuery is a query language for XML Data

Working with XML - XQuery

Page 60: SQL Server - Introduction to TSQL

DECLARE @x XML

SET @x = '<christmaslist><person name = "betty" gift = "camera"/><person name = "zach" gift = "elmo doll"/><person name = "brad" gift = "socks"/></christmaslist>'

XQuery – Declaring our XML string

Page 61: SQL Server - Introduction to TSQL

SELECT @x.exist('/christmaslist/person[@gift="socks"]')

SELECT @x.exist('/christmaslist/person[@gift="lump of coal"]')

SELECT @x.exist('/christmaslist/person[@gift="Socks"]‘)

SELECT @x.value('/christmaslist[1]/person[1]/@name', 'VARCHAR(20)‘)

SELECT @x.query('/christmaslist/person')

XQuery - Querying

Page 62: SQL Server - Introduction to TSQL

query()

value()

exist()

nodes()

modify()

XQuery - Querying

Page 63: SQL Server - Introduction to TSQL

http://msdn.microsoft.com/en-us/library/ms345117.aspx

XQuery - Resources

Page 64: SQL Server - Introduction to TSQL

ADO.NET gives you full control over how you access and retrieve data from the data source

Strongly typed data sets

Work in disconnected mode

ADO.NET

Page 65: SQL Server - Introduction to TSQL

SQLConnection

Manages the connection to the database

SQLCommand

Defines the data to be read, updated etc.

SQLDataAdapter

Runs the SQLCommand against the database

DataSet

A complete in-memory copy of the data (tables, relationships, data types…) Search, filter, navigate your data – without even being connected to the

database!

ADO.NET

Page 66: SQL Server - Introduction to TSQL

Randomize Select output

Repeat statements with GO x

TSQL Tricks

Page 67: SQL Server - Introduction to TSQL

Spatial Data playground

http://www.conceptdevelopment.net/Database/Geoquery/

Hidden Features in SQL Server

http://stackoverflow.com/questions/121243/hidden-features-of-sql-server

Top 10 Hidden Gems in SQL Server

http://technet.microsoft.com/en-au/library/cc917696.aspx

Resources 1/2

Page 69: SQL Server - Introduction to TSQL

T-SQL Enhancements

Download from Course Materials Site (to copy/paste scripts) or type manually

http://sharepoint.ssw.com.au/training/UTSSQL/

Session 2 Lab

Page 70: SQL Server - Introduction to TSQL

Free chats and webcasts

List of newsgroups

Microsoft community sites

Community events and columns

Where Else Can I Get Help?

www.microsoft.com/technet/community

Where else can I get help?

Page 71: SQL Server - Introduction to TSQL

3 things…

[email protected]

u

http://

peitor.blogspot.com

twitter.com/peitor

Page 72: SQL Server - Introduction to TSQL

Thank You!

Gateway Court Suite 10 81 - 91 Military Road Neutral Bay, Sydney NSW 2089 AUSTRALIA

ABN: 21 069 371 900

Phone: + 61 2 9953 3000 Fax: + 61 2 9953 3105

[email protected]