SQL Server - Introduction to TSQL

Post on 08-May-2015

2404 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

Transcript

SQL Server 2008 for DevelopersUTS Short Course

Specializes in

C# and .NET (Java not anymore)

TestingAutomated tests

Agile, ScrumCertified Scrum Trainer

Technology aficionado • Silverlight• ASP.NET• Windows Forms

Peter Gfader

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

Course Timetable Course Materials

Course Website

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

SQL Management Studio

SQL Configuration Manager

Consoles

SQLCMD PowerShell

SQL Profiler

SQL Database Tuning Advisor

Last Week

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

1. Modify maintenance plan

2. 2nd page in wizard (new plan)

http://ola.hallengren.com/

Steps• Backup• Integrity check • Index optimization

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

Best practices - Maintenance

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

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?

New Data Types

Inline variable assignment

Table Value Parameters

DDL Triggers

CTE (Common Table Expressions)

TOP %, XML Queries

PIVOT/UNPIVOT

ADO.NET

Agenda

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

Floating point numeric data

float real

Datatypes – Approximate Numerics

char

Fixed length

varchar

Variable length

Datatypes - text

char, varchar, text

Ascii - 1 byte

nchar, nvarchar, ntext

Unicode - 2 bytes

binary, varbinary, image

Datatypes - text

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

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

cursor

table

Timestamp = rowversion

binary number Reflects data modifications

uniqueidentifier = Guid

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

Datatypes - Other

Filestream

Sparse Columns

Filtered Indexes

Spatial Data

HierarchyID

DATE and TIME data types

New Data Types

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

Example: Storing images

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

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

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

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

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

A:\ Just add a new BlogUrl column in

Solution?

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?

Use a sparse column

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

Solution

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%

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.

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%

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

Useful for indexing columns with null values in them

Filtered Indexes

Geometry

Geography

Virtual Earth Integration

Planar vs Geodetic Algorithms

Separate install for spatial assemblies

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

Spatial Data Types

Spatial Datatypes Hierarchy

Geometry allows you to represent and process polygons

Spatial Data Types

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?

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

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

Instead of:

DECLARE @myVar intSET @myVar = 5

You can:

DECLARE @myVar int = 5

Inline Variable Assignment

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

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

The SPROC would look like this:

CREATE PROCEDURE sp_MySproc2(@myPeeps PeepsType READONLY)

Table Value Parameters

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

DDL Triggers

PIVOT

CTE (Common Table Expression) Before

CTE (Common Table Expressions) After

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

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

<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

What happened to our relationships?

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

Working with XML - RAW

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

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

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

</AdventureWorks.Person.Person>

Working with XML - Auto

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

Working with XML - Auto

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

<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

Can control how the XML gets output

Ugly query

Is there a better way?

Working with XML - Explicit

SELECT TOP 3

BusinessEntityID "Person/@BusinessEntityID",

FirstName "Person/FirstName"

FROM AdventureWorks.Person.Person

FOR XML PATH ('')

Working with XML - PATH

XQuery is a query language for XML Data

Working with XML - XQuery

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

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

query()

value()

exist()

nodes()

modify()

XQuery - Querying

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

XQuery - Resources

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

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

Randomize Select output

Repeat statements with GO x

TSQL Tricks

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

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

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?

3 things…

PeterGfader@ssw.com.a

u

http://

peitor.blogspot.com

twitter.com/peitor

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

info@ssw.com.auwww.ssw.com.au

top related