22
Informatica - Classe Quinta robertomana.it SQL Server pag 1 SQL Server Rev. Digitale 1.0 del 01/09/2016 Introduzione a Microsoft SQL Server ………………………….…….…..………….………… 2 Tipi di Dati ……………………………………………………………..…...………………….. 2 SQL Express ……………………………………….…………………………..……………….. 4 Tabelle ……………………………………….………………………………………….…….. 5 Query ……………………………………….……………………………….…….…….…….. 6 Viste ……………………………………….………………………………………….....…….. 6 Funzioni …………………………………….………………………………………..….…….. 6 Stored Procedure …………………………….………………………………….……….…….. 8 Transact SQL ……….……………………………….…………………………..……….…….. 12 Trigger …………………………………….…………………………………………….…..….. 13 Transazioni …………………………………….…………….…………………..…….…..….. 15 Gestione delle Relazioni …………………….………………………………...………….…….. 16 Enterprise manager …………………….………………………………...……………...…….. 17 Spostamento e backup del database …………………………………...……………...…….. 17 Import Export di dati …………………………………...…………………..………...…….. 18 Gestione degli utenti …………………………………………………...……………...…….. 19

ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Embed Size (px)

Citation preview

Page 1: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 1

SQL Server Rev. Digitale 1.0 del 01/09/2016

Introduzione a Microsoft SQL Server ………………………….…….…..………….………… 2

Tipi di Dati ……………………………………………………………..…...………………….. 2

SQL Express ……………………………………….…………………………..……………….. 4

Tabelle ……………………………………….………………………………………….…….. 5

Query ……………………………………….……………………………….…….…….…….. 6

Viste ……………………………………….………………………………………….....…….. 6

Funzioni …………………………………….………………………………………..….…….. 6

Stored Procedure …………………………….………………………………….……….…….. 8

Transact SQL ……….……………………………….…………………………..……….…….. 12

Trigger …………………………………….…………………………………………….…..….. 13

Transazioni …………………………………….…………….…………………..…….…..….. 15

Gestione delle Relazioni …………………….………………………………...………….…….. 16

Enterprise manager …………………….………………………………...……………...…….. 17

Spostamento e backup del database …………………………………...……………...…….. 17

Import Export di dati …………………………………...…………………..………...…….. 18

Gestione degli utenti …………………………………………………...……………...…….. 19

Page 2: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 2

Introduzione a Microsoft SQL Server http://www.w3schools.com/sql/

http://www.html.it/guide/guida-t-sql/

Caratteristiche: velocità, affidabilità, sicurezza

Usa un linguaggio SQL conforme allo standard ANSI SQL9, case unsensitive.

SQL Srver è un database di tipo Client Server, con un Server che opera in background (talvolta indicato come

processo „demone’, nel senso di invisibile all‟utente) e che gestisce le richieste dei vari client. Tutte le operazioni di

archiviazione ed elaborazione dei dati vengono eseguite sul server, mentre il client è poco più di un dumb terminal

(terminale stupido). Ha anche la possibilità di gestire le SSL Secure Cockets Layer per proteggere i dati durante il

passaggio tra server e client.

Attivazione del SERVER

Per poter utilizzare SQL Server per prima cosa occorre avviare il Server dati. Normalmente in fase di installazione

si imposta il check “Avvia automaticamente il servizio all‟avvio del Sistema Operativo” ed il servizio parte in

automatico ad ogni accensione del PC.

Per verificare lo stato del server andare su START / PROGRAMMI /

MICROSOFT SQL SERVER 2005 / CONFIGURATION TOOLS / SQL SERVER CONFIGURATION MANAGER

Il Server può essere Avviato / Interrotto manualmente. Dalla sottofinestra “SERVICE” delle Proprietà è possibile

reimpostare l‟opzione di Avvio manuale o Avvio automatico del servizio.

Una volta avviato il server rimane attivo in modalità batch e gestisce una elaborazione multithreading, che

permette a più client di connettersi contemporaneamente al database ed eseguire interrogazioni simultanee.

Tipi di Dati

I Dati Numerici

TINYINT – 1 byte - Valore numerico compreso tra –128 e 127. TINYINT UNSIGNED 0 e 255

SMALLINT – 2 byte - Valore numerico tra –32768 e 32767. SMALLINT UNSIGNED 0 e 65535

INT– 4 byte Valore numerico tra –2.147.483.648 e 2.147.483.647. INT UNSIGNED 0 e 4Mld

BIGINT – 8 byte Valore numerico compreso tra 2 63

BIGINT UNSIGNED 0 e 2 64

REAL – 4 byte - Floating point tra -3.402823466E+38 e -1.175494351E-38.

FLOAT – 8 byte - Floating point tra -1.7976931348623157E+308 e -2.2250738585072014E-308

DECIMAL (N) o NUMERIC(N) – Identici. Valore numerico ad altissima precisione. Hanno una dimensione

fissa di 5 bytes per la parte intera, più un numero di bytes variabile a seconda della precisione richiesta

(numero di cifre dopo la virgola)

MONEY valuta ($400.50). 8 bytes complessivi fissi, con 4 sole cifre dopo la virgola.

Page 3: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 3

Le Stringhe

CHAR (N) – Stringa a lunghezza fissa pari a N (max 8000 caratteri). Il campo viene completato con spazi. Notare

che, a differenza di Access, quando si elaborano queste stringhe da un programma HOST, le stringhe mantengono

SEMPRE gli spazi finali, per cui occorre necessariamente accodare sempre al campo proveniente da SQL Server il

metodo

xxx.ToString.Trim( )

VARCHAR (N) – Stringa di lunghezza variabile. In pratica è identico a CHAR, cambia solo la modalità di

registrazione. Vengono memorizzati soltanto i caratteri effettivamente presenti (max 8000) più due byte per

la lunghezza. Eventuali caratteri eccedenti N vengono eliminati. Occupa meno spazio ma è più lenta della

precedente. In MySQL i campi definiti CHAR con lunghezza superiore a 4 vengono automaticamente

convertiti in VARCHAR.

NCHAR(N) – Stringa a lunghezza fissa UNICODE (max 4000 caratteri)

NVARCHAR (N) – Stringa a lunghezza variabile UNICODE

TEXT (N) – Stringa a lunghezza variabile. Max 4 Mld di caratteri + 4 byte per la lunghezza

NTEXT (N) – Stringa UNCODE a lunghezza variabile. Max 2 Mld di caratteri + 4 byte per la lunghezza

Altri tipi di dati

BIT – 1 / 0 sono riconosciuti i valori TRUE / FALSE (in modo case unsensitive)

DATETIME – Data e Ora, nel formato del S.O.. cioè GG / MM / AAAA- hh:mm:ss

Può contenere solo la data o solo l‟ora. Occupa 8 bytes. Ha una precisione di 3,3 msec, gestisce date dal

1° gennaio 1753 al 31 dicembre 1999

SMALLDATETIME – Data e Ora su soli 4 bytes. Ha una precisione di 1 minuto, gestisce date dal

1° gennaio 1900 al 6 giugno 2079

BINARY (N) – Dati Binari a lunghezza fissa (max 8000 bytes)

VARBINARY (N) – Dati Binari a lunghezza variabile (max 8000 bytes)

IMAGE (N) – Dati Binari a lunghezza variabile . Max 4 Mld di caratteri + 4 byte per la lunghezza

ROWVERSION (vecchio TIMESTAMP) Numero univoco a livello di database automaticamente aggiornato

in corrispondenza di ogni aggiornamento del record. ReadOnly. Utile per la gestione della concorrenza. Ogni

tabella può includere una sola colonna di tipo ROWVERSION

UNIQUEIDENTIFIER Identificatore Univoco Globale (GUID Globaly Unique Identifier). Si stratta di una

stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12).

Gli si può assegnare un valore diretto mediante la funzione NEWID

Gestione dei contatori

Un contatore è un campo numerico incrementato automaticamente. Un qualunque campo numerico può essere

gestito come contatore (cioè ad incremento automatico) settando la proprietà

Identità = SI

Si può anche impostare per il contatore un valore iniziale a piacere ed un incremento diverso da 1.

Page 4: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 4

SQL Express

Visual Studio mette a disposizione del programmatore un server SQL meno prestante rispetto a quello

“professionale” e con una interfaccia grafica piuttosto ridotta, ma in cui è possibile testare tutti i possibili comandi

SQL riconosciuti dal server “professionale”.

Avvio del Server

SQL Express viene installato automaticamente insieme a Visual Studio, Dalla versione Visual Studio 2012 in

avanti il demone di ascolto non viene più avviato insieme alla macchina, e nemmeno risulta visibile come servizio

interrotto nella lista dei servizi, ma viene avviato automaticamente nel momento in cui da Visual Studio si crea una

nuova connessione ad un DB, e viene avviato non come servizio ma come semplice processo utente.

Creazione di una nuova connessione

Dall‟interno di Visual Studio aprire Server Explorer, selezionare DataConnections e, mediante tasto destro,

selezionare Add Connection

Sulla finestra che si apre selezionare “Microsoft SQL Server Database File” che consente di localizzare il file

dati attraverso il file system. Scegliendo invece “Microsoft SQL Server” il DB verrebbe automaticamente creato

nello spazio dati di Sql Server. Comoda la spunta alla voce “Always use this selection”.

Sulla finestra successiva, tramite sfoglia, ricercare la cartella in cui si intende creare il database ed impostare il

nome SENZA estensione (che verra aggiunta automaticamente).

Page 5: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 5

Dopo aver creato la connessione ad un database (nuovo o esistente), in basso a destra, nella finestra delle proprietà,

è possibile vedere la connection string utilizzata per l‟accesso al database. Questa connection string potrà poi

essere replicata pari pari nelle applicazioni C#.

Il Connection Timeout (tipicamente 30 sec) è il tempo di attesa nell‟attivazione della connessione. Se in questo

tempo la connessione non va a buon fine verrà segnalato un messaggio di errore.

DBA Data Base Administration

Tabelle

Tabelle / tasto destro / Nuova Tabella. Si apre in corrispondenza n ambiente che un approccio parallelo alla

definizione della tabella, che può essere definita in formato grafico e/o in formato SQL. Il nome della tabella può

essere definito SOLTANTO all‟interno dell‟SQL.

Col tasto destro sul campo codice, di può impostare la chiave primaria (esattamente come in Access).

Notare, in coda, all‟SQL, la definizione di Primary key, Foreign Key e Check.

Come salvare la tabella creata

Terminata la creazione della tabella, per salvare la struttura clickare sul pulsante Aggiorna (in figura quello

cerchiato). Il database viene aggiornato con la creazione della nuova tabella. Se di chiude la finestra senza aver

aggiornato il Database, SQL Server chiede se si desidera salvare il codice SQL all‟interno di un file di testo per

eventuali usi futuri. Clickando su Aggiorna questa domanda non viene fatta.

Il corrispondenza dell‟OK il DB verrà

creato automaticamente.

Il pulsante Test Connection consente di

verificare se la connessione è OK

Page 6: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 6

Se si desidera cambiare il nome ad una tabella già creata, è sufficiente cambiare il nome all‟interno dell‟SQL e

aggiornare il DB. Verrà creata una nuova tabella con il nuovo nome e occorrerà poi rimuovere la vecchia tabella.

Attenzione che i dati NON vengono ovviamente copiati e dovrà essere predisposta apposita procedura.

Aggiornamento dell’interfaccia

Dopo aver creato una nuova Vista, Funzione o Stored Procedure, o inserito nuovi dati, per poterli vedere andare su

sulla voce corrispondente del DB a fare tasto destra / Aggiorna

Query

Le query sono tipicamente applicazioni client eseguite sul client.

Sul Server è possibile definire in alternativa tre tipi di procedure: Viste, Funzioni e Stored Procedure .

Viste

Una vista è una Query memorizzata sul server che può essere vista come una Tabella Virtuale.

La vista è in pratica una mini tabella direttamente linkata al database vero e proprio. All‟interno di una vista :

Lo scopo delle Viste è quello di rendere più flessibile la visibilità dei dati. Ad esempio su una tabella contenente

una anagrafica dei Dipendenti, contenenti sia dati anagrafici generali (nome, cognome, residenza) sia dati più

sensibili come ad esempio lo stipendio, si può creare una Vista che esclude i campi sensibili e, a certi utenti,

assegnare i privilegi di accesso soltanto alla Vista.

CREATE VIEW dbo.View1

AS

SELECT Correntisti.Nome, Correntisti.Tel FROM Correntisti;

All‟interno di una Vista:

E‟ possibile utilizzare ESCLUSIVAMENTE l‟istruzione SELECT

Non è consentito utilizzare ORDER BY (Standard ANSI : la view come la tabella deve ritornare un set di

dati che non possiede alcun ordinamento)

Non sono ammessi parametri di ingresso

In SQL Server una Stored Procedure non può utilizzare un’altra Stored Procedure come sorgente dati

(come in Access), ma può invece utilizzare come sorgente dati una VISTA che, come detto, a tutti gli effetti si

comporta come una normale tabella. Per cui se una Stored Procedure Q3 deve utilizzare altre due procedure Q1 e

Q2 è sufficiente creare Q1 e Q2 come viste e poi utilizzarle come sorgente dati all‟interno del FROM di Q3.

C‟è però il problema che le Viste NON accettano parametri di ingresso. A tale scopo SQL Server utilizza le

Funzioni Inline possono essere utilizzate per ottenere proprio la funzionalità delle viste parametrizzate.

Funzioni

Sono lo strumento per definire funzioni / procedure (nel senso classico del temine) all‟interno del DBMS, non

necessariamente legate alla restituzione di un recordset. Devono avere sempre un RETURN finale.

Consentono un accesso al DB in sola lettura, per cui non possono eseguire comandi DDL / DML

Consentono il passaggio in-line dei parameri

Consentono di restituire al chiamante un singolo risultato, un intero record o un intero recordet.

Page 7: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 7

Funzioni Inline -

Restituiscono un recordset completo. Costituiscono la funzionalità di SQL Server più vicina alle Query di Access.

CREATE FUNCTION dbo.CercaFiliali(

@cComune int,

)

RETURNS TABLE

AS

RETURN (

SELECT filiali.*

FROM filiali

WHERE filiali.cComune=@cComune )

A livello di query client, la precedente funziona può essere richiamata nel modo seguente :

string sql = "select * FROM dbo.CercaFiliali(18, 'BRE') ";

ado.EseguiQuery(sql, CommandType.Text);

Eventuali parametri devono essere comunque passati, anche se presentano un valore di default.

Funzioni con Valori Scalari - Restituiscono un singolo valore:

CREATE FUNCTION dbo.CercaBancaSingola (

@cFiliale int

)

RETURNS varchar(20)

AS

DECLARE @ret varchar(20);

SELECT @ret = filiali.nome

FROM filiali

WHERE filiali.cFiliale=@cFiliale;

IF (@ret IS NULL)

SET @ret = '';

RETURN @ret;

A livello di query client, la precedente funziona può essere richiamata nel modo seguente :

string sql = "select dbo.CercaBancaSingola(3) ";

string ris= ado.EseguiScalar(sql, CommandType.Text);

Esecuzione delle Query: nota su Date e Numeri Float

Dopo aver scelto una tabella (es Movimenti) e fatto / Mostra Dati tabella / è possibile accodare nuovi valori

inserendoli nel formato del SO, senza l‟utilizzo di apici

Viceversa i valori

scritti direttamente all‟interno di Insert Into

passati all‟interfaccia grafica di esegui query

passati tramite C#

devono essere scritti in formato internazionale senza apici, obbligatori solo caso di date e strighe

insert into Movimenti

(codConto, importo, data, tipo)

values( 7, 99.33, '11/26/2013' , 'P’); // oppure

values('7', '99.33', '11/26/2013', 'P');

Nel caso dell‟interfaccia grafica di EseguiQuery, numeri (int e float) e anche stringhe vanno scritti senza apici

Nel caso invece dei parametri passati da C#, vanno scritti tutti con gli apici, (tranne gli interi)

Page 8: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 8

Stored Procedure

Strumento più generale dei precedenti.

Il nome di una Stored Procedura non può iniziare con un numero ma deve iniziare con una lettera.

Pur chiamandosi Stored Procedure, queste procedure, prima di terminare, resituiscono un valore al

chiamante (normalmente Return 0). Questo valore non centra nulla con il valore ritornato da EseguiScalar.

Query che restituiscono un recordset

Possono essere eseguite solo tramite eseguiQuery, la quale, esattamente come in Access, può essere eseguita

solo nei modi seguenti:

In caso di query testuale si usa il CommandType.Text.

In caso di procedura su DBMS si usa il CommandType.StoredProcedura

Eventuali parametri della stored procedure possono essere passati solo tramite l‟oggetto Parameters

Esempio

CRETE PROCEDURE CercaFiliali (

@parameter1 int = 18,

@parameter2 varchar(20) = 'BRE' )

AS

SELECT filiali.*

FROM filiali, banche

WHERE filiali.cBanca=Banche.cBanca

AND filiali.cComune=@parameter1

AND banche.nome = @parameter2;

Richiamo da C#

SqlParameter par2 = new SqlParameter();

par2.ParameterName = "@parameter2";

par2.Direction = ParameterDirection.Input;

par2.DbType = DbType.String;

par2.Size = 20; // obbligatorio nel caso di stringhe !!

par2.Value = “Unicredit”;

ado.cmd.Parameters.Add(par2);

string sql = "CercaFiliali";

ado.EseguiQuery(sql, CommandType.StoredProcedure);

L‟ordine con cui vengono creati e aggiunti i parametri è irrilevante.

Quello che conta è soltanto il nome che DEVE essere lo stesso utilizzato all‟interno della StoredProcedure.

La preinizializzazione dei parametri di input non vale nel caso di SQL embedded, in cui occorre in ogni caso

passare TUTTI i parametri attesi dalla procedura.

Non è consentito accodare i parametri al nome della procedura e usare CommandType.Text

Comandi DDL/DML

Possono essere eseguiti solo con eseguiNonQuery, la quale può essere eseguita in tre modi diversi:

In caso di query testuale si usa al solito il CommandType.Text.

In caso di procedura su DBMS si hanno due possibilità:

Accodare i parametri al nome della Procedura e usare il CommandType.Text

Passare i parametri tramite l‟oggetto Parameters e usare il CommandType.StoredProcedure

Non è possibile utilizzare una combinazione mista dei due casi.

Page 9: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 9

Esempio – Creazione di una tabella

CREATE PROCEDURE CreaTabMovimenti AS

create table MOVIMENTI2 (

cMov int identity(1,2), /* a partire da 1 con incr di 2 */

cConto int,

tipo varchar(10) NOT NULL,

data dateTime,

importo real,

primary key (cMov),

foreign key (cConto) references Conti(cConto) ON DELETE CASCADE,

check (import > 10),

check(data between '1/1/2012' and '31/12/2012')

);

ALTER TABLE MOVIMENTI2

ADD CHECK (tipo='Prelievo' OR tipo='Versamento');

Query scalari (che restituiscono un singolo valore)

Sono richiamate normalmente con EseguiScalar. Per risultato scalare si intende quello restituito dalla select che

viene AUTOMATICAMENTE ritornato al chiamante come stringa. Tutto ciò è indipendente dal return finale.

Esempio

CREATE PROCEDURE [dbo].[queryScalar] @cod int = 0 AS SELECT Banche.nome from Banche where Banche.codBanca = @cod; RETURN 0;

Il chiamante può usare EseguiScalar nel modo seguente:

string ris = ado.eseguiScalar(“queryScalar”, CommandType.StoredProcedure);

Con eseguiScalar è passibile:

Accodare i parametri al nome della Procedura e usare il CommandType.Text

Passare i parametri tramite l‟oggetto Parameters e usare il CommandType.StoredProcedure

Query che restituiscono campi multipli di un solo record - Parametri di output

Le Stored Procedure posso anche gestire uno o più parametri di output che sono tipicamente utilizzati nel caso in

cui una query restituisca più campi di un unico record . Nel caso di un solo campo l‟utilizzo di un parametro di

output è del tutto inutile in quanto il risultato viene già automaticamente ritornato dalla select senza dover fare

nulla.

Queste query possono essere indifferentemente richiamate trmite

EseguiScalar senza però andare a leggere il risultato della select

EseguiNonQuery

Il confine tra EseguiNonQuery e EseguScalar è in pratica soltanto formale: eseguiScalar, nel caso di query

effettivamente scalare, restituisce automaticamente il risultato, eseguiNonQuery no.

Page 10: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 10

Esempio

CREATE PROCEDURE [dbo].[cercaBanca]

@cod int = 0,

@nome varchar(20) output,

@citta varchar(20) output

AS

SET NOCOUNT ON;

begin

SELECT @nome = Banche.nome, @citta = Banche.citta

from Banche

where Banche.codBanca = @cod;

RETURN 0;

end

SET NOCOUNT ON Stops the message indicating the number of rows affected by a Transact-SQL statement

from being returned as part of the results. Riduce il traffico specie nel caso di Stored Procedure costituite da più

statements.

I parametri di output possono essere gestiti solo mediante l‟oggetto Parametrs e non possono essere accodati in

forma testuale.

Richiamo da C#

Come detto all‟inizio si può utilizzare indifferentemente eseguiScalar (senza andare a leggere il valore

restituito) oppure eseguiNonQuery.

SqlParameter par1 = new SqlParameter();

par1.ParameterName = "@cod";

par1.Direction = ParameterDirection.Input;

par1.DbType = DbType.Int16;

par1.Value = "4";

ado.cmd.Parameters.Add(par1);

SqlParameter par2 = new SqlParameter();

par2.ParameterName = "@nome";

par2.Direction = ParameterDirection.Output;

par2.DbType = DbType.String;

par2.Size = 20; // obbligatorio nel caso di stringhe !!

par2.Value = ""; // non obbligatorio

ado.cmd.Parameters.Add(par2);

ado.eseguiNonQuery(“cercaBanca”, CommandType.StoredProcedure); // oppure :

ado.eseguiScalar ( “cercaBanca”, CommandType.StoredProcedure);

MessageBox.Show(par2.Value.ToString() + " - " + par3.Value.ToString());

Codice di ritorno delle Stored Procedure

Il valore ritornato dal return finale può essere letto dal chiamante mediante un parameter speciale avente nome =

RETURN_VALUE e direction = ReturnValue.

SqlParameter par1 = new SqlParameter();

par1.ParameterName = "@RETURN_VALUE";

par1.Direction = ParameterDirection.ReturnValue;

par1.DbType = DbType.Int32;

ado.cmd.Parameters.Add(par1);

. . . . . . . . . . . . . . . . .

MessageBox.Show(par1.Value.ToString());

Page 11: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 11

Esempio - Inserimento di un nuovo record

CREATE PROCEDURE inserisciMovimento (

@cConto int,

@tipo varchar(10),

@data datetime,

@importo float

)

AS

INSERT INTO movimenti // I campi contatore non devono essere passati

(cConto, Tipo, Data, Importo)

VALUES(@cConto, @tipo, @data, @importo);

RETURN SCOPE_IDENTITY();

Il return finale restituisce al chiamante l’ID del nuovo record appena aggiunto.

Comodissimo. Risolve perfettamente il problema della multiutenza.

Richiamo da C#

string sql = "inserisciMovimento 3, 'prelievo', '12/25/2012', '1.99'";

ado.EseguiNonQuery(sql, CommandType.Text);

oppure

ado.cmd.Parameters.Add("@cConto", SqlDbType.Int).Value = "2";

ado.cmd.Parameters.Add("@tipo", SqlDbType.VarChar, 10).Value = "Prelievo";

ado.cmd.Parameters.Add("@data", SqlDbType.Date).Value = "12/25/2012";

ado.cmd.Parameters.Add("@importo", SqlDbType.Float).Value = "1.99";

// Dichiarazione del return value come da pagina precedente.

ado.EseguiNonQuery(inserisciMovimento, CommandType.StoredProcedure);

MessageBox.Show(“ID del nuovo record = “ + par1.Value.ToString());

L‟utilizzo di questa forma abbreviata può essere utilizzata SOLO per i parametri di INPUT.

Se i parametri provengono da Text Box occorre utilizzare la notazione del SO. La conversione viene fatta in

automatico.

In alternativa è anche possibile eseguire la procedura precedente con eseguiScalar(). Per trasformare la

procedura precedente in scalare è sufficiente aggiungere prima del return (oppure al posto del return),

una istruzione select che restituisca lo scope_identity come risultato scalare: SELECT SCOPE_IDENTITY();

Se non si elimina il return, il risultato potrà essere letto in due modi diversi, con il ris di eseguiScalar o con par1

Esempio - Cancellazione di un record

CREATE PROCEDURE p5_CancellaMovimento(

@cMov int = null

)

AS

delete

from movimenti

where cMov=@cMov;

Richiamo da C#

string sql = "cancellaMovimento '15'";

ado.EseguiNonQuery(sql, CommandType.Text);

oppure

ado.cmd.Parameters.Add("@cMov", SqlDbType.Int).Value = "48";

ado.EseguiNonQuery(“cancellaMovimento”, CommandType.StoredProcedure);

Page 12: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 12

Transact SQL : Stored Procedure con Comandi Multipli

Dentro le Stored Procedure possono essere memorizzati più comandi SQL ciascuno terminato dal punto e virgola.

Più comandi inseriti all‟interno di una unica Stored Procedure consentono prestazioni migliori rispetto

all‟esecuzione singola (minor generazione di traffico tra Client e Server).

Per meglio combinare tra loro i vari statement SQL da eseguire all‟interno della Stored Procedure, SQL Server

mette a disposizione il cosiddetto Transact SQL cioè tutti i costrutti tipici della programmazione come istruzioni

per il controllo del flusso (if e while per esempio), variabili, gestione degli errori, ecc.

BEGIN - END

Le istruzioni BEGIN END vengono utilizzati esattamente come le graffe del C, cioè per raggruppare più istruzioni

SQL o T-SQL in un unico blocco. Nel caso di istruzione singola possono essere omessi.

DECLARE

Nella sezione di codice (dopo gli eventuali parametri) è possibile, tramite un blocco DECLARE, definire delle

variabili locali di appoggio all‟esecuzione della Transact SQL. Es: Declare cConto int;

SET

Consente di assegnare un valore ad una variabile. Es: Set cConto =5;

IF - ELSE

Struttura fondamentale per l‟elaborazione condizionale. Il Test di uguaglianza è il semplice uguale: if (a=b)

Ciclo WHILE

Le istruzioni SQL interne al ciclo sono racchiuse all‟inteno di un blocco BEGIN END. Le istruzioni SQL vengono

eseguite ripetutamente finchè la condizione specificata è vera, a quel punto si esce dal loop. E‟ possibile controllare

l‟esecuzione delle istruzioni all‟interno del loop attraverso le parole chiave BREAK e CONTINUE.

CASE - END

Analogo allo switch del C.

Esempio Completo

CREATE PROCEDURE dbo.p6_ComandiMultipli (

@cConto int,

@Tipo varchar(10),

@Data datetime,

@Importo real

)AS

BEGIN

INSERT INTO movimenti

(cConto, Tipo, Data, Importo)

VALUES(@cConto, @Tipo, @Data, @Importo);

if (@Tipo='prelievo')

update conti

set saldo = saldo - @Importo

where cConto=@cConto;

else

update conti

set saldo = saldo + @Importo

where cConto=@cConto;

END

Page 13: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 13

Altro Esempio

CREATE PROCEDURE p7_ComandiMultipli2 (

@cConto int=null,

@Tipo varchar(10) =null,

@Data datetime =null,

@Importo real =null )

AS

IF NOT exists(select cConto from Conti Where cConto=@cConto)

BEGIN

return(-1); /* errore */

END

ELSE

BEGIN

INSERT INTO movimenti

(cConto, Tipo, Data, Importo)

VALUES(@cConto, @Tipo, @Data, @Importo);

return(1); /* OK */

END

Richiamo da C#

SqlParameter par = new SqlParameter();

par.ParameterName = "@RETURN_VALUE";

par.Direction = ParameterDirection.ReturnValue;

par.DbType = DbType.Int16;

par.Value = "0";

ado.cmd.Parameters.Add(par);

string sql = "p7_ComandiMultipli2";

ado.EseguiNonQuery(sql, CommandType.StoredProcedure);

MessageBox.Show(par.Value.ToString());

Stored Procedure di Sistema

Per rinominare una tabella o una Stored Procedure o altro, si può utilizzare la Sytem Stored Procedure

sp_rename richiamabile secondo la normale sintassi delle Stored Procedure.

adoNet ado = new adoNet();

string sql = "sp_rename 'movimenti', 'movimentiNew';";

ado.EseguiNonQuery(sql, CommandType.Text);

Trigger

Un trigger è una Stored Procedure non richiamabile lato client, ma che “scatta” automaticamente in corrispondenza

di una operazione di INSERT / DELETE / UPDATE. I Trigger vengono salvati NON all‟interno della voce Stored

Procedure, ma al di sotto della tabella a cui si riferiscono.

Il codice interno al trigger può accedere alle tabelle speciali INSERTED e DELETED che contengono i record

inseriti o cancellati in corrispondenza dell‟ultima azione SQL. Per cui:

Un Trigger dichiarato FOR INSERT andrà a leggere i record INSERTED

Un Trigger dichiarato FOR DELETE andrà a leggere i record DELETED

Nel caso dei Trigger dichiarati FOR UPDATE la tabella DELETED conterrà i dati prima della modifica

(le vecchie righe) mentre la INSERTED conterrà i dati dopo la modifica (le nuove righe).

Page 14: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 14

Esempio 1:

CREATE TRIGGER p8_updateSaldo ON Movimenti

FOR INSERT /* , delete, update : sono ammesse più azioni contemporanee */

AS

begin

DECLARE @cConto int;

DECLARE @tipo varchar(10);

DECLARE @importo float;

SELECT @cConto = cConto, @tipo = tipo, @importo = importo

from INSERTED;

IF(@tipo='versamento')

update conti

set conti.saldo = conti.saldo + @importo

where conti.cConto = @cConto;

ELSE

update conti

set conti.saldo = conti.saldo - @importo

where conti.cConto = @cConto;

end

Esempio 2:

CREATE PROCEDURE dbo.Aggiorna_Saldo

( @versamento real, @cConto int )

AS

update Conti set saldo = saldo + @versamento

where cConto = @cConto;

CREATE TRIGGER AggiungiMovimento ON Conti

FOR UPDATE

AS

begin

declare @cConto int;

declare @saldoOld real;

declare @saldoNew real;

declare @importo real;

select @cConto = cConto, @saldoNew = saldo from INSERTED;

select @saldoOld = saldo from DELETED;

set @importo = @saldoNew-@saldoOld;

insert into Movimenti (cConto, Tipo, Data, Importo)

Values (@cConto, 'versamento', getDate(),@importo);

end

Attenzione che le tabelle INSERTED e DELETED sono accessibili soltanto come tabelle nel FROM di una

preventiva istruzione SELECT e non sono utilizzabili direttamente all‟interno del WHERE o INSERT

dell‟istruzione successiva.

Page 15: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 15

Transazioni

I comandi multipli inseriti all‟interno di una unica Stored Procedure non costituisco di per sé una transazione.

Prima di eseguire i comandi l‟interprete SQL esegue un controllo sintattico sui comandi stessi. Se uno dei comandi

(eventualmente anche l‟ultimo) contiene un errore sintattico, allora nessuno dei comandi viene eseguito. Se però

non sono presenti errori sintattici, allora viene avviata l‟esecuzione e se qualcuno dei comandi fallisce (perché ad

esempio è venuta a mancare la rete), l‟esecuzione dei comandi si interrompe, ma i comandi eseguiti in precedenza

non vengono più annullati. Per racchiudere i comandi all‟interno di una transazione occorre utilizzare la seguente

sintassi:

CREATE PROCEDURE [dbo].[P12_Bonifico]

@importo float = 0,

@contoSorgente int,

@contoDestinazione int

AS

if(@contoDestinazione=@contoSorgente)

return -2;

BEGIN TRANSACTION

INSERT INTO Movimenti(importo,data,tipo,codConto)

VALUES(@importo,GETDATE(),'P',@contoSorgente)

if(@@ERROR<>0)

BEGIN

ROLLBACK

// 16=Severity Level (da 1 min a 18 max).

// 1=state (da 1 a 255 identifica la procedura utente che è andata in errore). RAISERROR('Errore durante il prelievo',16,1)

return -1;

END

INSERT INTO Movimenti(importo,data,tipo,codConto)

VALUES(@importo,GETDATE(),'V',@contoDestinazione)

if(@@ERROR<>0)

BEGIN

ROLLBACK

RAISERROR('Errore durante il versamento',16,2)

return -1;

END

-- STEP 4: If we reach this point, the commands completed successfully

COMMIT

RETURN 0

Page 16: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 16

Gestione delle Relazioni

Diagrammi / Nuovo Diagramma Database

Se il database è grande, si possono creare e salvare più diagrammi disgiunti (ciascuno inerente ad un certo gruppo

di tabelle).

Aggiungere le tabelle utente desiderate.

Le relazioni si costruiscono eseguendo un trascinamento con il mouse tra i campi interessati esattamente come in

Access. In fase di creazione dell‟Associazione si presenta la seguente finestra di configurazioni:

Verifica Dati esistenti Durante la Creazione. E‟ possibile, in fase di creazione dell‟associazione, attivare /

disattivare la verifica sulla bontà dei dati esistenti rispetto al vincolo che si sta introducendo.

Attiva Vincolo della Chiave Esterna Per ogni Associazione SQL Server imposta per default il check di

integrità referenziale che non consente modifiche di inserimento / Aggiornamento / Cancellazione tali da

compromettere l‟integrità della relazione.

Agenti di Replica Gli Agenti di Replica sono dei file eseguibili che fanno parte di SQL Server e che si

occupano della creazione di copie di schemi e di dati, il rilevamento di aggiornamenti nel server e la

distribuzione delle modifiche tra i server. Questo check Indica se applicare il vincolo di integrità quando un

agente di replica esegue un inserimento o un aggiornamento nella tabelle correlate.

Opzione Elimina regola In caso di eliminazione di un record dalla tabella 1 è possibile :

Nessuna azione Un messaggio di errore indica che l'eliminazione dalla tabella 1 non è consentita e viene

eseguito il rollback dell'operazione DELETE.

Sovrapponi Elimina tutte le righe della tabella N che contengono dati coinvolti nella relazione di chiave

esterna. E‟ la solita eliminazione a catena

Imposta Null Imposta al valore Null il campo chiave esterna della tabella N (ammesso che questo possa

possa accettare valori Null)

Imposta predefinito Imposta al valore Predefinito il campo chiave esterna della tabella N. Se non sono

stati impostati valori predefiniti viene impostato il valore Null. Se questo non è ammesso viene impedita

l‟eliminazione.

Opzione Aggiorna regola Analogo al precedente nel caso in cui venga modificata la chiave di un record della

tabella 1.

Page 17: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 17

Enterprise Manager

Spostamento e Backup del database

Enterprise Manager tiene traccia dei database gestiti e del loro percorso, database che dunque non possono essere

spostati né eliminati. Se si vuole copiare il database (per utilizzarlo ad esempio su un altro computer), il modo più

semplice è quello di copiare il file .MDF da Gestione Risorse dopo aver chiuso EnterpriseManager ed arrestato il

Server Sql

Copiato il file sul nuovo PC ( oppure eliminato da Enterprise Manager il file originale mediante tasto Destro /

Elimina), si può andare sulla voce Database, tasto Destro / Tutte le Attività / Collega Database e ricercare

mediante il solito comando Sfoglia il database .MDF da collegare a SQL Server. Si può selezionare anche, fra gli

utenti disponibili, chi sarà il Proprietario (dbo) del database in fase di collegamento..

Attenzione che questo copia incolla manuale funziona solo se il database non è partizionato, cioè distribuito su più

files (eventualmente posizionati su macchine differenti). In tal caso occorre lanciare la procedura completa di backup

Procedura di Backup

Selezionare il database, tasto destro / Tutte le Attività / Backup Database.

Impostazioni:

database da salvare

nome e Descrizione del database da

salvare

tipologia di backup (Database - completo)

Destinazione (Percorso / Nome da

assegnare al file di backup)

Sovrascrittura (opzione di sovrascrittura o

accodamento rispetto ad un eventuale file

di backup già esistente)

Pianificazione: il backup può essere

pianificato ad una data precisa (giorno X

ora Y) oppure in modo periodico (ogni

settimana di domenica alle ore 0:00:00)

Page 18: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 18

Il file di backup è slegato da SQL Server, che però tiene traccia del nome e percorso in cui il file di backup è stato

salvato (tipica cartella di backup posizionata insieme al database). E‟ sicuramente buona cosa non spostare questo

file in modo da poter sfruttare al meglio lo storico gestito da SQL Server.

L‟opzione Backup Database – differenziale aggiunge nel file di backup soltanto le modifiche eseguite dopo

l‟ultimo backup. E‟ anche possibile salvare queste modifiche su un nuovo file rispetto al file in cui è stato salvato il

backup completo (ogni volta si ripete “Aggiungi” cambiando il nome). In tal modo si potrà avere un file principale

di backup aggiornato, ad esempio, alla fine del mese, e poi ogni giorno un file di backup differenziale. In tal modo

si potrà ritornare indietro a qualsiasi giorno del mese. Per fare il RESTORE fino al giorno desiderato occorrerà

dapprima fare il Restore del database completo e poi, uno alla volta, dei primi N file differenziali.

Per ripristinare il file di backup, andare su Database e fare tasto Destro / Tutte le Attività / Ripristina Database e

selezionare, nella parte inferiore della finestra, il file che si intende ripristinare.

Import / Export di dati

Per importare i dati (ad esempio da un database Access) occorre :

1) creare un nuovo database vuoto senza specificare il percorso. Il db verrà creato all‟interno del percorso di default

C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Data

2) Selezionare il database appena creato e fare Tasto Destro / Tasks / Importa Dati

In italiano TASKS = “Tutte le Attività”

Selezionare Access

Fare il Browse del database

Use Windows Authentication

Selezionare tutte le tabelle

FINISH

3) db / Tasto Destro Refresh

Per recuperare / trasferire il database appena creato occorre chiudere Enterprise Manager, arrestare il demone (che

altrimenti mantiene bloccato il database, andare nella precedente cartella di SQL Server e copiare il databse.

Page 19: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 19

Gestione degli utenti

Facendo click sulla voce Utenti compare l‟elenco degli utenti attualmente abilitati ad accedere al database dbLibri.

Inizialmente l‟unico utente abilitato è dbo, data base owner cioè colui che ha creato il database; normalmente

coincide con sa (System Administrator) ma potrebbe essere uno qualsiasi degli altri utenti. Facendo tasto desto /

Proprietà si vede che dbo è db_owner, cioè proprietario del database e può dunque fare sul database tutto ciò che

vuole.

Selezionando invece Utenti / Nuovo Utente Database, sul primo ComboBox (Nome Account Accesso) compare un

elenco di utenti già esistenti ma non ancora abilitati ad eccedere al database corrente. Scegliendo “nuovo” si può

creare un nuovo utente ed abilitarlo ad accedere al database.

L‟ultima finestra “Accesso Database” consente di aggiungere l‟utente attuale ad uno dei gruppi predefiniti (ogni

utente appartiene per default al gruppo PULBIC, ma può essere aggiunti ad altri gruppi, ad esempio db_datareader)

La parola Ruoli in SQL Server è sinonimo di Gruppi.

Si può scegliere

se eseguire una autenticazione Windows

(utente attualmente loggato) oppure una

autenticazione SQL Server (default)

il database predefinito in corrispondenza

dell‟accesso di quell‟utente.

La lingua predefinita

Page 20: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 20

Dopo aver creato l‟utente “Segreteria”, esso verrà aggiunto a dbo nella lista degli utenti abilitati ad accedere al

database corrente. Facendo doppio click oppure tasto desto / Proprietà si apre la finestra dei diritti dell‟utente

Segreteria . Cliccando su “Autorizzazioni” si possono impostare le autorizzazioni dell‟utente su:

Tabelle del database (Visualizzazione dei dati, Inserimento, Modifica, Cancellazione)

StoredProcedure (diritto di Esecuzione)

Singole colonne delle tabelle (diritto di Visualizzazione, e di Modifica dei dati).

Selezionando invece la cartella Protezione (cartella sullo stesso livello di Database), è possibile rimuove i vari

utenti, modificare le password, modificare il database di apertura.

Generazione di Script SQL

Selezionata una tabella, fare Tasto Destro / Tutte le Attività / Genera Script SQL.

Questa utility consente di creare un file .sql contenente una sequenza di comandi sql che verranno eseguiti uno

dopo l‟altro in corrispondenza del lancio dello script. Utile quando si intende eseguire sul database una

manutenzione periodica che richiede sempre la stessa sequenza di operazioni.

Cliccando su “Mostra Tutto” viene mostrato in basso a sinistra l‟elenco di Tabelle, Viste, Stored Procedure

memorizzate all‟interno del database corrente. Mediante i pulsanti Aggiungi / Rimuovi si possono selezionare gli

oggetti per i quali si vuole creare uno script. Per default è preimpostata la tabella da cui è stata aperta l‟attuale

finestra degli Script.

Le sottofinestre Formattazione e Opzioni consentono di selezionare i comandi che si intendono eseguire

all‟interno dello script. Per default sono selezionati i comandi “Create Table” e “Drop Table” per la tabella

selezionata (Script che in pratica cancella la tabella attuale (se esiste) e quindi provvede a ricrearla). Utile ad

esempio dopo che è stato eseguito il back up dei dati da un server ad un altro.

Il pulsante “Anteprima” mostra il codice, generato automaticamente, relativo allo script corrente (in base a quanto

selezionato nelle sottofinestre precedenti).

Lo script, salvato in un file .sql, potrà poi essere lanciato da Query Analizer.

Page 21: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 21

DTS Data Transformation Services

La cartella Data Transformation Services si trova allo stesso livello della cartella Database. Si tratta di un strumento

sempre di tipo Importa / Esporta dati che però rispetto allo strumento precedente, consente di manipolare i dati da

Importare / Esportare. Anche su file molto grandi i DTS sono sempre rapidissimi.

Esmpio:

Tasto Destro / Nuovo Pacchetto

Trascinare sul lato destro la sorgente Dati (ad esempio Microsoft OLEDB Provider for SQL Server) e selezionare il

database che fungerà da origine dati. (nella primo combo selezionare Nuova Connessione).

Trascinare sul lato destro la destinazione Dati (ad esempio Excel 2000) e selezionare il file su cui si andrà ad

esportare i dati.

Trascinare sul lato destro l‟Attività “Trasforma Dati” (ruota dentata). (Entrambe le icone precedenti devono essere

disselezionate). Al rilascio del mouse viene richiesto di selezionare l‟origine dati (clickare sull‟icona di SQL

Server), quindi viene richiesto di selezionare la destinazione dei dati (clickare sull‟icona di Excel).

Facendo doppio click sulla relazione creata (oppure Tasto Destro / Proprietà) si apre una finestra di configurazione

della trasformazione:

Sul tab Origine si possono selezionare i dati da

esportare, dati che possono provenire da una

tabelle oppure da una query SQL.

Sul tab Destinazione si può selezionare il foglio di

Excel su cui si vuole esportare i dati. Mediante il

tasto CREA, se la destinazione è un database, si

può creare una nuova tabella con i campi impostati

mediante una Create Table. Se la dest è Excel è

possibile creare un nuovo foglio (tabella) avente

come colonne i campi impostati da CreateTable.

Sul tab Trasformazioni si imposta la formula di

trasformazione dei dati. (associazione dei campi

della query con le colonne da creare su Excel).

NOME indica semplicemente il nome assegnato

alla trasformazione. All‟apertura del tab ci sono

giò alcune relazioni proposte ma in genere non

sono corrette per cui conviene fare SELEZIONA

TUTTO, ELIMINA e poi selezionare NUOVO

Page 22: ISTITUTO TECNICO INDUSTRIALE STATALE 'Grobertomana.altervista.org/wp-content/uploads/2016/08/SQL-SERVER.pdf · stringa esadecimale del tipo XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX (8-4-4-4-12)

Informatica - Classe Quinta robertomana.it

SQL Server

pag 22

Cliccando su Nuovo si apre una finestra che chiede quali tipo di DTS si intende applicare. Le più frequenti sono

CopyColumn per copiare semplici tabelle di database (ad esempio da Access a SQL Server) oppure

ActiveXScript che consente in pratica di inserire uno script Visual Basic / Java Script all‟interno della

trasformazione, script che verrà eseguito in fase di importazione. In questo script si possono utilizzare tutte le

istruzioni del linguaggio (if, cicli, etc.) più le funzioni di libreria. Soluzione estremamente flessibile per esportare

dati tra ambienti differenti.

L‟ultimo tab della finestra precedente Opzioni consente di impo stare dei delimitatori e fare l‟import With Key.

Nome è un semplice nome identificativo della trasformazione che si sta creando. Cliccando su Proprietà si apre la

finestra di configurazione dello Script. Nel combo in alto a sinistra selezionare lo script che si intende utilizzare.

“Genera Automatico” genera automaticamente un codice di trasformazione che potrà essere raffinato manualmente.

Terminata l‟editazione si può salvare la DTS mediante il menù Pacchetto / Salva con Nome (dts1) e lanciare

l‟esecuzione mediante il tasto Play ►.

Chiusa la DTS, mediante Tasto Destro / Pianifica Pacchetto si può pianificare l‟esecuzione della DTS in modo che

venga automaticamente eseguita ad esempio ogni domenica sera alle 22