Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software [email protected].

103
Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software [email protected]

Transcript of Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software [email protected].

Page 1: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

Sql Server 2005

La Piattaforma ApplicativaLa Piattaforma Applicativa

Davide Mauri Factory Software

[email protected]

Page 2: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

2

Agenda

T-SQL Ranking / Top n CTE Pivot / Unpivot Try … Catch Encryption

XML Xml data type XQuery Full Text Search

Page 3: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

3

Agenda

Integration Services Data e Control Flow Connections Task Transformations

Reporting Services Report Manager Sviluppo dei report con Visual Studio Report Builder

Page 4: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

4

T-SQL

Page 5: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

5

FUNZIONI di RANKING

RANK DENSE_RANK NTILE ROW_NUMBER

Page 6: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

6

RANK

Ritona il “posizionamento” di ogni riga all’interno di una partizione

PARTITION BY definisce il criterio di partizionamento

ORDER BY stabilisce l’ordine in cui viene appicato il rank alle righe

Sintassi:SELECT

select_list,RANK() OVER (PARTITION BY col1 ORDER BY col2) as rankFROM Tabella1

Page 7: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

7

RANK

RANK = 1 + numero di rank che precedono la riga

Se due o più righe sono alla pari, ricevono lo stesso rank

I rank potrebbero non essere numeri consecutivi

Page 8: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

8

DENSE_RANK

RANK = 1 + numero di DISTINCT rank che precedono la riga

Se due o più righe sono alla pari, ricevono lo stesso rank

Non vi sono “gap” nei rank

SELECT select_list,DENSE_RANK() OVER (PARTITION BY col1 ORDER BY col2) as rankFROM Tabella1

Page 9: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

9

NTILE

Distribuisce le righe di una partizione ordinata in uno specificato numero di gruppi

Se il numero di righe non è divisibile per il numero di gruppi I gruppi avranno ampiezza differente Prima compariranno i gruppi con più elementiSELECT

select_list,NTILE(nr_gruppi) OVER (PARTITION BY col1 ORDER BY col2) as rankFROM Tabella1

Page 10: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

10

ROW_NUMBER

Ritorna il numero sequenziale di una riga all’interno di una partizione ordinata

SELECT select_list,ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2) as rankFROM Tabella1

Page 11: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

11

TOP

Specifica che solo la prima parte di un result set verrà ritornata

PERCENT WITH TIES (+ order by) TOP @variabile

Page 12: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

12

COMMON TABLE EXPRESSION (CTE) Result set temporaneo Non è salvato come oggetto Rimane in vita solo per la durata della

query che lo ospita Migliora la leggibilità e la manutenibilità

delle query

Page 13: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

13

CTE: Utilizzo

Query ricorsive Anchor Member e Recursive Member Quert hint: option (maxrecursion n)

Sostituto delle view (quando non serve salvare i metadati)

Referenziare lo stesso result set più volte nella query

Page 14: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

14

CTE: Sintassi

Struttura della CTE:

WITH nome_cte [(nome colonna,…)] AS(query che definisce la CTE)

Utilizzo:

SELECT * FROMnome_cte

Page 15: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

15

PIVOT

Ruota un’espressione tabellare trasformando i valori univoci di una colonna nelle colonne dell’espressione di output

Effettua le aggregazioni che costituiscono l’output SELECT VendorID, [164] AS Emp1, [198] AS Emp2, [223] AS

Emp3, [231] AS Emp4FROM ( SELECT PurchaseOrderID, EmployeeID, VendorID FROM Purchasing.PurchaseOrderHeader) pPIVOT(

COUNT (PurchaseOrderID)FOR EmployeeID IN ( [164], [198], [223], [231] )) AS pvt

Page 16: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

16

UNPIVOT

Effettua l’operazione inversa rispetto a PIVOT

Ruota le colonne in righe I valori nulli non possono essere usati

SELECT VendorID, Employee, OrdersFROM (SELECT VendorID, Emp1, Emp2, Emp3, Emp4 FROM pvt) pUNPIVOT (Orders FOR Employee IN (Emp1, Emp2, Emp3, Emp4, Emp5))AS unpvtGO

Page 17: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

17

Error handling

Gestione simile al C# / VB.NET attraverso TRY e CATCH: Se si verifica un errore nel blocco TRY il

controllo passa al blocco CATCH. Eseguito il blocco CATCH il controllo passa al

codice che sta dopo END CATCH

Blocco TRY

Blocco CATCH

CodiceSuccessivo a END CATCH

Exception

Nessuna Exception

Page 18: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

18

Sintassi di TRY...CATCH

Sintassi:BEGIN TRY...END TRYBEGIN CATCH.... Gestione dell’errore .....END CATCH

Il batch è unico!!!!

Page 19: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

19

Try...catch TIPS

Ogni TRY..CATCH deve essere contenuto in un unico BATCH, Stored Procedure, Trigger

I blocchi TRY…CATCH possono essere nidificati

Errori con severity <= 10 sono warning che non vengono intercettati dal blocco CATCH

Errori con severity >= 20 che causano l’interruzione della connessione: Non sono gestiti da TRY…CATCH Tuttavia finchè la connessione non è interrotta

il blocco CATCH funziona.

Page 20: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

20

Try...catch e XACT_STATE

Nel blocco catch è bene controllare lo stato della transazione attraverso XACT_STATE() 1: Transazione attiva, la sessione può

compiere qualsiasi azione (COMMIT o ROLLBACK)

0: Nessuna transazione attiva -1: Esiste una transazione aperta, ma NON

può essere eseguito il COMMIT. BEGIN CATCHIF (XACT_STATE()) = -1 ROLLBACK TRANSACTION;IF (XACT_STATE()) = 1 COMMIT TRANSACTION;END CATCH

Page 21: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

21

Informazioni sugli errori

ERROR_MESSAGE() ERROR_NUMBER() ERROR_SEVERITY() ERROR_STATE() ERROR_PROCEDURE() ERROR_LINE() Ritornano informazioni solo all’interno di

un blocco CATCH. Posso utilizzate una stored procedure per il

logging

Page 22: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

22

TRY...CATCH: tips

Utilizzo di RAISERROR per il rethrow

Intercetta: Deadlock errors

Non intercetta: Errori di compilazione tipo syntax error Statement level recompilation errors (object

name resolution errors)

Page 23: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

23

ENCRYPTION

Possibilità di criptare i valori tramite l’utilizzo di EncryptKey DecryptKey

Utilizzabili negli statement DML

Solo chi è in possesso della chiave giusta potrà vedere il valore Gli altri vedranno NULL

Page 24: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

24

XML

Page 25: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

25

XML in un Database Relazionale? E’ lo standard de facto

Utilizzato come Lingua Franca

Dati trasmessi e ricevuti come XML Sempre più utilizzato

I database prima o poi devono cominciare a fare i conti con questa realtà Allora meglio farlo nel modo migliore

Page 26: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

26

XML in un Database Relazionale? XML può vivere all’interno del db in 3 modi

1. TEXT Come accade con Sql Server 2000 Si perdono le funzionalità intrinsche di XML

Page 27: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

27

XML in un Database Relazionale?2. RELATIONAL FORMAT

Se possibile un documento può essere scomposto in tabelle

Si sfruttano le capacità del motore relazionale Si ottiene tramite OPENXML o XMLBULKLOAD

(SqlXml)

Page 28: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

28

XML in un Database Relazionale? 3. XML Data Type

Utilizzo di tutte le funzionalità di xml Supporto ricerche full-text Supporto validazione Utilizzabile in ogni situazione

Colonne, Parametri, Variabili, Return Value

Attenzione non abusarne Violazione della forma normale

Page 29: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

29

XML in un Database Relazionale? Perchè dovrei?!?!

Memorizzazione di documenti XML Memorizzazione di dati destrutturati Sistemi Integrati

B2B (Business To Business)/B2C (Business To Consumer)

A2A (Application To Application) Messaging (SOAP)

Occhio a non sentirsi “obbligati” Ogni tanto la si cerca di usare solo perchè è

nuova o perchè non si conoscono alternative

Page 30: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

30

XML in un Database Relazionale

Una colonna XML può memorizzare well-formed XML Fragments Documents

Page 31: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

31

XML in un Database Relazionale

Pieno supporto e gestione dell’encoding-- This works correctlyINSERT INTO xml_tab VALUES(4,'<?xml version="1.0" encoding="utf-8"?><doc1> <row au_id="111-11-1111"/></doc1>')

-- This fails, encoding does not agree w/variable typeINSERT INTO xml_tab VALUES(5,N'<?xml version="1.0" encoding="utf-8"?><doc1> <row au_id="111-11-1111"></row></doc1>')

Page 32: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

32

Typed & Untyped XML

E’ possibile fare in modo che il tipo XML sia validato da un XML Schema

Per validare i dati inseriti

Per assicurarsi che tutte le entità abbiano la stessa struttura Definizione dei tipi di dati utilizzati

Page 33: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

33

Constrained XML

E’ possibile anche utilizzare il vincolo CHECK Constrained XML

CREATE TABLE docs(pk INT PRIMARY KEY, xCol XML not nullCONSTRAINT CK_name CHECK (xCol.exist('/book/author[first-name = last-name]') = 0))

Page 34: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

34

XML Schema Collections

Gli XML Schema utilizzati devono essere nel database

CREATE XML SCHEMA COLLECTION Il nome verrà utilizzato nell’associazione con il

tipo di dato Lo schema deve essere inserito come literal

Page 35: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

35

XML Schema CollectionsCREATE XML SCHEMA COLLECTION geocoll '<xs:schema ...

targetNamespace= urn:geo>

... </xs:schema>'

literal schematargetNamespace

CREATE TABLE Locations( location xml(geocoll) ...)

reference toschema collection

Memorizzazione nella tabelle di sistema sys.xml_schema_collections sys.xml_schema_namespaces

Page 36: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

36

XML Schema Sample<xs:schema xmlns:xs= "http://www.w3.org/2001/XMLSchema" targetNamespace="urn:geo" xmlns:tns="urn:geo"> <xs:simpleType name="dim"> <xs:restriction base="xs:int"/> </xs:simpleType> <xs:complexType name="Point"> <xs:sequence> <xs:element name="X" type="tns:dim"/> <xs:element name="Y" type="tns:dim"/>

</xs:sequence> </xs:complexType> <xs:element name="Point" type="tns:Point"/></xs:schema>

for namespace urn:geo

similar to sql type,

structured type,i.e. a tree

element that mightappear in xml data

Page 37: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

37

Utilizzo di Typed XML

CREATE TABLE point_tab( id int IDENTITY primary key, -- geocoll include schema for 'urn:geo' namespace thepoint xml(CONTENT, geocoll)GO

-- this works, schema-valid PointINSERT INTO point_tab VALUES( '<Point xmlns="urn:geo"><X>10</X><Y>20</Y></Point>')

-- this insert fails, value foo is not a dim (integer)INSERT INTO point_tab VALUES( '<Point xmlns="urn:geo"><X>10</X><Y>foo</Y></Point>')

Page 38: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

38

XML Schema Collections

L’ XML schema non è realmente memorizzato nel database Il contenuto è scomposto e memorizzato in

tabelle di sistema Solo le imformazioni fondamentali vengono

memorizzate

Informazioni non memorizzate Comments, Processing Instructions <xs:annotation>

Page 39: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

39

XML Schema Collections

Ottenere lo schema memorizzato sys_schema_namespace(…, …)

Non è lo schema orginale Ma è Functionally Equivalent

select xml_schema_namespace(N’dbo’, N’geocollection’)

Page 40: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

40

FOR XML

Risultato memorizzabile in una varibile Tramite la keywork TYPE

Nuova keywork PATH per effettuare lo shaping dell’XML Più semplice da usare che EXPLICIT

DECLARE @x xmlSET @x = SELECT * FROM authors FOR XML AUTO, TYPE

Page 41: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

41

FOR XML

SELECT au_id as [@authorid], au_fname as [name/firstname], au_lname as [name/lastname]FROM authors FOR XML PATH

<!– one row per selected row --><row authorid="111-11-1111"> <name> <firstname>Bob</firstname> <lastname>Smith</lastname> </name></row>...

Page 42: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

42

XML BULK LOAD

I dati XML possono essere popolati tramite BULK LOAD

Page 43: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

43

XQuery

XQuery è l’evoluzione di XPath Più correttamente è un SuperSet

Supporto di un subset di XQuery implementazione basata con il draft Novembre

2003 http://www.w3.org/TR/xquery

Permette di poter fare query su dati semistrutturati e/o destrutturati XML

Page 44: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

44

XQuery

XQuery fatta da “FLWOR” Expressions: FOR LET (not supported) WHERE ORDER BY RETURN

Può lavorare direttamente sull’ XML Data Type sia come variabile sia come colonna

Page 45: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

45

XQuery

Possibilità di utilizzare sia query XPath che FLWOR

(: this is a valid XQuery :)/people/person[age > 30]

(: so is this FLWOR expression :)for $p in /people/personwhere $p/age > 30order by $p/age[1]return $p/name

Page 46: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

46

XQuery-- returns <li>moe in record number x</li> -- where x is the ID column, or blank columnSELECT xml_col.query(' for $b in //person where $b/@name=“davide" return <li>{ data($b/@name) } in record number {sql:column("xml_tab.id")}</li> ') FROM xml_tab

-- returns <li>moe is a stooge</li> DECLARE @occupation VARCHAR(50)SET @occupation = ' is a singer'SELECT xml_col.query(' for $b in //person where $b/@name=“eric" return <li>{ data($b/@name) } {sql:variable("@occupation") }</li> ') FROM xml_tab

Page 47: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

47

XQuery & Xml Data Type

Xml Data Type Functions exist() value() query() nodes() modify()

SELECT xmlCol.query(‘/Root/ProdDesc/*’)

FROM myTable

Page 48: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

48

xml.exist()

xml.exist usa XML type and XQuery expression false se la query restituisce NULL true negli altri casi

Può essere utilizzato in constraint di tipo CHECK

Page 49: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

49

xml.exist()

-- pdoc must have a person element-- as a child of the people rootCREATE TABLE xmltab( id INTEGER PRIMARY KEY, pdoc XML CHECK (pdoc.exist('/people/person')=1))-- okinsert xmltab values( 1, '<people><person name="bob"/></people>')

-- fails, no personsinsert xmlpeople values( 2, '<people><emp name="fred"/></people>')

Supporto per DEFAULT

Page 50: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

50

xml.value()

xml.value restituisce un tipo di dato nativo SQL Server e scalar input: XQuery, SQL Type restituisce un tipo scalare o NULL non può restituire un tipo XML

Utilizzo predicati (es. WHERE Clause) result values views

Page 51: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

51

xml.value()-- insert some rowsINSERT xml_tab VALUES('<people><person name=“alessandro"/></people>')INSERT xml_tab VALUES('<people><person name=“davide"/></people>')INSERT xml_tab VALUES('<people><person name=“franco"/></people>')

-- this query SELECT id, xml_col.value('/people/person/@name','varchar(50)') AS nameFROM xml_tab

-- yields this resultset id name--------------------------1 alessandro2 davide3 franco

Page 52: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

52

xml.query()

xml.query resituisce un XML data type input: XQuery l’xml risultante può essere un XML Fragment può costruire nuovi elementi

<Invoice> <LineItem>Soda</LineItem> <LineItem>Ice</LineItem></Invoice>

Colonna Invoice, Tabella Invoices

SELECT invoice.query('Invoice/LineItem') FROM Invoices

<LineItem>Soda</LineItem><LineItem>Ice</LineItem>

Page 53: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

53

xml.nodes()

scompone il contenuto di un XML data type simile (concettualmente) a value(), ma

produce dei nodi, non un valore scalare il risultato è un rowset

il risultato può essere application al comando T-SQL CROSS APPLY si ottengono funzionalità simili ad OPENXML performance migliori

Page 54: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

54

xml.nodes()

--input xml in variable @x<row id=“1”><name>alessandro</name><name>davide</name></row><row id=“2”><name>franco</name></row><row id=“3/>

-- this query SELECT

... FROM

@x.nodes(‘//row’) T(rows)

-- yields this resultset id name--------------------------1 alessandro1 davide2 franco

Page 55: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

55

Using Relational Data in XQuery

SQL Server XQuery può utilizzare sia dati XML che dati relazionali sql:variable: accesso a variabili T-SQL sql:column: accesso a columns value

limitatamente alla riga in uso

Page 56: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

56

Using Relational Data With XML-- returns <li>moe in record number x</li> -- where x is the ID column, or blank columnSELECT xml_col.query(' for $b in //person where $b/@name=“Eric" return <li>{ data($b/@name) } in record number {sql:column("xml_tab.id")}</li> ') FROM xml_tab

-- returns <li>moe is a stooge</li> DECLARE @occupation VARCHAR(50)SET @occupation = ' is a stooge'SELECT xml_col.query(' for $b in //person where $b/@name=“Bruce" return <li>{ data($b/@name) } {sql:variable("@occupation") }</li> ') FROM xml_tab

Page 57: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

57

XQuery DML

Page 58: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

58

XQuery DML

xml.modify permette la modifica di XML XQuery non ha standard DML vengono utilizzati gli standard proposti

insert, delete, replace operators all’interno di espressioni XQuery

insert before or after element first or last sibling subelements and attributes

must be a single node replace

elements or attributes solo simple types “value-of" clause per aggiornare i valori

Page 59: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

59

XQuery DML - Original Document

declare @x xmlset @x = '<Invoice> <InvoiceID>1000</InvoiceID> <CustomerName>Jane Smith</CustomerName> <LineItems> <LineItem> <Sku>134</Sku> <Quantity>10</Quantity> <Description>Chicken Patties</Description> <UnitPrice>9.95</UnitPrice> </LineItem> <LineItem> <Sku>153</Sku> <Quantity>5</Quantity> <Description>Vanilla Ice Cream</Description> <UnitPrice>1.50</UnitPrice> </LineItem> </LineItems></Invoice>'

Page 60: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

60

XQuery DML - Using xml.modify

-- use modify to insert a subelementSET @x.modify( 'insert <InvoiceDate>2002-06-15</InvoiceDate> into /Invoice[1] ')

-- or insert an attributeSET @x.modify('insert attribute status{"backorder"} into /Invoice[1] ')

-- this deletes all LineItem elementsSET @x.modify('delete /Invoice/LineItems/LineItem')

-- change the value of the CustomerName elementSET @x.modify('replace value of /Invoice[1]/CustomerName[1]/text()[1] with "John Smith" ')

Page 61: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

61

XML filter

Index e query su istanze XML Analisi sul contenuto di un token I tag (attributi inclusi) sono rimossi

Sintassi — come per le altre colonne CREATE FULLTEXT INDEX ON docs (xDoc)

XML Full Text Search

Page 62: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

62

Può essere combinata con XQuery Full-text search come filtro, poi XQuery

search

SELECT R.X.query ('//sec[@num=12]')FROM (SELECT * FROM docs WHERE contains (xDoc, 'Wrd1 Wrd2')) R(X)

Supporta l’attributo xml:lang Utilizza correttamente il linguaggio

SELECT * FROM docs WHERE contains (xDoc, 'Visionen',

LANGUAGE 'German')

XML Full Text Search

Page 63: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

63

Integration Services

Page 64: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

64

Architettura ed Object Model

Separazione dei package in due aree Control Flow Data Flow

Modello ad oggetti facilmente estendibile basato sul .NET Framework Non limitato ai soli Custom Task

Page 65: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

65

Architettura ed Object Model

Supporto per sorgenti e destinazioni multiple

Supporto nativo XML, SQL CE 2005, AS 2005 come sorgenti/destinazione dati

Introduzione delle DTS Expression Una sorta di linguaggio interno Vagamente simile a C#

Page 66: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

66

Ambiente di sviluppo

BI Development Studio Praticamente è Visual Studio

Designer molto più ordinato tramite l’utilizzo di aree “tematiche”

Supporto per sistemi di gestione del codice Visual SourceSafe

Migliorate le capacità di debugging

Page 67: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

67

Package Elements

Numerosi nuovi task Data Flow Data Preparation Workflow Sql Server Scripting Analisys Server Maintenance

Aggiunto il supporto per i Containers Loop, For Each, Sequence, ecc…

Page 68: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

68

Tools

Wizard per: Configurazione dei Package Deployment e Update Migrazione dai DTS di SQL Server 2000

DTExecUI e DTExec Esecuzione dal prompt

DTUtil Gestione dal prompt (copy, crypt, sign…)

Page 69: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

69

Package Management

E’ possibile utilizzare dei Folder per fare ordine

Logging non limitato alle trasformazioni

Supporto nativo per la configurazione del package senza necessità di utilizzo dell’ambiente di editing

Package Checkpointing

Page 70: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

70

Sviluppo

Molti elementi permettono l’utilizzo di un “Linguaggio” interno: DTS Expressions

Possibilità di creare workflow molto complessi

Possibilità di gestire gli eventi (es. OnError)

Programmabili ed estendibili con .NET

Page 71: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

71

Packages

Page 72: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

72

Package Content

Un Package può contenere: Control Flow

Task Container

Data Flow Trasformations

Connections Configurations Variables

Page 73: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

73

Operational Surfaces

Control Flow Data Flow Event Handlers Package Explorer Execution Results Connection Managers Properties

Page 74: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

74

Control Flow

Descrive l’intero processo definito dal Package

Organizza i task e specifica percorsi e/o precedenze

Il workflow è basato sul risultato di un’espressione DTS Praticamente nessun limite alla fantasia!

Page 75: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

75

Data Flow

Descrive il flusso dei dati (Pipeline)

Specifica dettagliatamente tutto ciò che riguarda la manipolazione dei dati

E’ un task del Control Flow

Source Transform Destination

Page 76: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

76

Connection Managers

Le connessioni visualizzate in uno spazio dedicato

Non solamente dedicate ai database Es. SMTP Connection Manager, FTP Connection

Manager

Condivise sia dagli elementi del Control Flow che del Data Flow

Page 77: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

77

Control Flow Elements

Tre diversi tipi di Container:

Possibilità di effettuare dei loop: For Loop ForEach Loop

Raggruppamento di task Sequence

Page 78: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

78

Control Flow Elements

Numerosi nuovi task che evitano la scrittura di codice

Data Flow Task Per la definizione dettagliata dei processi di

ETL

File System Task Per la gestione dei file e delle directory (Create,

Copy, Move, Delete, Rename, Set Attributes)

Page 79: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

79

Control Flow Elements

Script Task Esecuzione di script scritti in VB.NET Editor *finalmente* evoluto

Send Mail Task Supporto SMTP (Era Ora! )

FTP Task Supporto per tutte le operazione non solo il

GET

Page 80: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

80

Control Flow Elements

WMI Data Reader Task Per ottenere informazioni da WMI

WMI Event Watcher Task Per monitorare i dati di WMI e rispondere ai

cambiamenti

XML Task Per operare su documenti XML (XSLT, Merge,

Patch, Diff, Validate, XPath)

Page 81: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

81

Data Flow Elements

Conditional Split Transform Per processare una riga secondo diversi criteri

Multicast Transform Permette di processare una riga più volte e con

diversi meccanismi

Union All Transform Prende più input e di generare un solo output

Page 82: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

82

Data Flow Elements

Sort Transformation Per ordinare le righe

Count Rows Transformation Per contare le righe

Derived Column Per modificare o creare colonne

Page 83: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

83

Data Flow Elements

Fuzzy Grouping Pulisce e standardizza i dati (Es. Rimuove i

duplicati)

Fuzzy Lookup Pulisce ulteriormente i dati (Es.

Standardizzazione, Correzione ed inserimento valori mancanti)

Percentage Sampling Crea dati di prova

Page 84: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

84

Data Viewers

Attivi durante il debug

Permettono di interrompere l’esecuzione di un Data Flow visualizzare i dati

E’ possibile vedere anche la distribuzione dei dati con l’ausilio di grafici

Page 85: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

85

Reporting Services

Page 86: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

86

Reporting Services

Editor Report: BI Dev. Studio Non è obbligatorio in quanto il report è un file

xml Però è praticamente indispensabile

Creare un progetto di tipo “Report Project”

Aggiungere: Data Sources Parametri Reports

Page 87: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

87

Reporting Services

Ogni proprietà visibile (e non) può essere modificata tramite l’uso di expressions

Il linguaggio è VB.NET

In più ci sono funzioni aggiunte dall’infrastruttura di SSRS Previous RowNumber CountRows

Page 88: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

88

Sviluppo

E’ possibile aggiungere funzioni tramite Codice Embedded (VB.NET) External Assembly (Qualsiasi linguaggio .NET)

Per personalizzare il report è possibile utilizzare immagini Memorizzate nel report (embedded) Esterne (link) Memorizzata in un db

Page 89: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

89

Reporting Services

Il Report Manager è “solamente” l’applicazione di default fornita da Microsoft

Utilizza il web service per visualizzare i metadati e gestire i report

I report vengono visualizzati in un IFRAME E sono chiamati tramite URL

Page 90: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

90

Reporting Services

E’ possibile integrare SSRS in qualsiasi applicazione tramite Chiamate SOAP (Web Services) Chiamate via URL

E’ possibile integrare il tutto con SharePoint Web part disponibile dalla SP2 dei “vecchi” RS

Page 91: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

91

Reporting Services

Creazione di report ad-hoc Tramite il Report Builder

Non c’è un liberta “totale” I report possono essere creati sulla base di un

“Report Model” Il “Report Model” contiene i metadati

disponibili Più che sufficiente nel 99% dei casi

Il “Report Model” si crea da Visual Studio

Page 92: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

92

Reporting Services

Page 93: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

93

Invocazione di Report

E’ possibile accedere a Reporting Services in una soluzione custom in due modalita’: Url access

richiesta via HTTP/GET Web Services

Richiesta via SOAP

Page 94: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

94

Invocazione di Report

Page 95: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

95

Invocazione di Report

Url Access Report Server URL

Defaults to http://[servername]/ReportServer Report Name

Nome del report Report Parameters

I nomi devono mappare I parametri definiti nel report Es http://servername/ReportServer/ReportName?

CategoryID=1&EmployeeID=1

Page 96: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

96

Invocazione di Report

Web Services Esecuzione dei report

GetReportParameters() Render() Anche asincrona

Gestione report CreateReport() GetReportDefinition()

Page 97: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

97

Distribuzione dei report

I report possono essere visualizzati Da web, tramite il Report Manager Da applicazioni ad hoc, o integrati in

applicazioni esistenti

…ma possono anche essere loro ad andare dall’interessato Via mail Via network share

Questa funzionalità prendere il nome di Subscription

Page 98: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

98

Distribuzione dei report

Le subscription vengono eseguite in base ad una schedulazione Ad hoc Condivisa

La schedulazione fa affidamento sul SQL Server Agent Quindi deve essere attivo! Vengono creati dei Job ad hoc

Page 99: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

99

Distribuzione dei report

Distribuzione tramite network share

Page 100: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

100

Distribuzione dei report

Distribuzione via email

Page 101: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

101

Distribuzione dei report

Le sottoscrizioni guidate (Data-Driven subscription) permettono di impostare a runtime Destinatari Parametri Formati

I dati vengono prelevati tramite query ad hoc La sorgente dati, come al solito, può essere

qualsiasi cosa (SQL Server, Oracle, OLEDB, ODBC)

Page 102: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

102

Domande ?

Page 103: Sql Server 2005 La Piattaforma Applicativa Davide Mauri Factory Software davidem@factorysw.com.

© 2004 Microsoft Corporation. All rights reserved.This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.