Transact-SQL: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Marius~itwiki (discussione | contributi)
aggiunta
m Categorie
 
(45 versioni intermedie di 26 utenti non mostrate)
Riga 1:
{{Linguaggio di programmazione
{{T|lingua=inglese|argomento=informatica|data=dicembre 2007}}
[[id:|nome = Transact-SQL]]
A volte abbreviato con T-SQL '''Transact-SQL''' è l'estensione proprietaria del linguaggio [[SQL]] sviluppata da [[Microsoft]] e [[Sybase]]. La versione di Microsoft viene fornita insieme a [[Microsoft SQL Server]]. Sybase utilizza questo linguaggio in [[Adaptive Server Enterprise]], il successore di [[Sybase SQL Server]].
|immagine =
|didascalia =
|autore = [[Microsoft]], [[Sybase]]
|data =
|versione =
|utilizzo =
|paradigmi =
|tipizzazione =
|specifiche =
|estensione =
|influenzato_da =
|ha_influenzato =
|implementazione_riferimento =
|sistema_operativo =
|lingua =
|licenza =
|sito_web =
}}
AIn [[informatica]] '''Transact-SQL''' (a volte abbreviato con T-SQL '''TransactT-SQL''') è l'estensione proprietaria del linguaggio [[SQL]] sviluppata da [[Microsoft]] e [[Sybase]]. La versione di Microsoft viene fornita insieme a [[Microsoft SQL Server]]., mentre Sybase utilizza questo linguaggio in [[Adaptive Server Enterprise]], il successore di [[Sybase SQL Server]].
 
Transact-SQL espandeEspande le prestazioni di SQL aggiungendo:
* Funzioni per [[Struttura di controllo|controllo di flusso]];
* Possibilità di definire [[variabile (informatica)|variabili]] locali.
* Varie funzioni per la manipolazione di [[stringa (informatica)|stringhe]], date, espressioni matematiche.
* Miglioramento delle [[istruzione (informatica)|istruzioni]] DELETE e UPDATE.
 
== Controllo di flusso e struttura del linguaggio ==
Fra le ''keyword'' con cui Transact-SQL implementa il controllo di flusso si annoverano <code>BEGIN</code> e <code>END</code>, <code>BREAK</code>, <code>CONTINUE</code>, <code>GOTO</code>, <code>IF</code> e <code>ELSE</code>, <code>RETURN</code>, <code>WAITFOR</code>, e <code>WHILE</code>.
 
<code>IF</code> e <code>ELSE</code> consentono l'esecuzione [[struttura di controllo|condizionale]] di blocchi di istruzioni. Il [[batch]] che segue stampa "giorno festivo" se la data corrente è Sabatosabato o Domenicadomenica, oppure "giorno feriale" negli altri casi.
 
<pre>
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
PRINT 'ÉÈ un giorno festivo.'
ELSE
PRINT 'ÉÈ un giorno feriale.'
</pre>
 
Line 25 ⟶ 44:
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
BEGIN
PRINT 'ÉÈ un giorno festivo.'
PRINT 'Prenditi una vacanza!'
END
ELSE
BEGIN
PRINT 'ÉÈ un giorno feriale.'
PRINT 'Va a lavorare!'
END
Line 41 ⟶ 60:
<code>BREAK</code> provoca l'uscita da un loop che inizia con un <code>WHILE</code>, mentre <code>CONTINUE</code> fa eseguire il ciclo successivo del loop. Più avanti è riportato un esempio di loop <code>WHILE</code>.
 
== Variabili locali ==
<!--
 
Le variabili locali sono accessibili solo allo [[script]] che le utilizza. Transact-SQL non supporta variabili globali definite dall'utente.
==Local variables==
 
<code>DECLARE</code> dichiara una variabile, attribuendole un nome ed un tipo. Per attribuirle un valore si usa SET, e successivamente la variabile può essere usata utilizzandone il nome come riferimento.
Local variables are so named because they're local to the script executing them. Transact SQL doesn't support user-defined global variables.
 
Questo script dichiara una variabile come intero, la inizializza, e poi usa un <code>WHILE</code> per eseguire un loop.
<code>DECLARE</code> will declare a variable, giving it a name and a type. The SET statement can be used to provide a value, and the variable may be used in a statement by referencing its name.
 
This script declares a variable as an integer, initializes it, then uses <code>WHILE</code> to execute a loop.
 
<pre>
DECLARE @CounterContatore INT
SET @CounterContatore = 10
WHILE @CounterContatore > 0
BEGIN
PRINT 'TheNumero count iscicli: ' + CONVERT(VARCHAR(10), @CounterContatore )
SET @CounterContatore = @CounterContatore - 1
END
</pre>
 
All'interno del loop viene stampato un messaggio che include il valore corrente della variabile, dopo di che il contatore viene decrementato di uno.
The body of the loop will print a message including the value of the variable, and then decrement the counter.
 
Una variabile può essere inizializzata anche direttamente come risultato di un'istruzione:
A variable may be initialized as the result of a statement, like this:
 
<pre>
DECLARE @ArticleCountContaArticoli INT
SELECT @ArticleCountContaArticoli = COUNT(*) FROM ArticlesArticoli
INSERT INTO SizeLog (SampleTimeOrarioDiVerifica, ArticleCountContaArticoli ) VALUES (GETDATE(), @ArticleCountContaArticoli )
 
INSERT INTO SizeLog (SampleTime, ArticleCount) VALUES (GETDATE(), @ArticleCount)
</pre>
 
Qui, ad esempio, si legge il numero di righe contenute nella tabella 'Articoli', poi si aggiunge alla tabella 'SizeLog' una riga contenente il numero di righe e l'orario corrente.
which will get the count of rows in the Articles table, then insert a row including that count and the current clock time into the SizeLog table.
 
==Changes toIstruzioni DELETE ande UPDATE statementsampliate ==
In Transact-SQL, alle istruzioni DELETE e UPDATE può essere aggiunta un'opzione <code>FROM</code> che permette il collegamento ad altre tabelle mediante una <code>JOIN</code>. Nell'esempio che segue vengono cancellati tutti i record della tabella 'Utenti' che sono stati marcati con il flag 'Idle'.
In Transact-SQL, both the DELETE and UPDATE statements allow a FROM clause to be added which allows joins to be included.
 
This example delete all <CODE>users</CODE> who have been flagged with the 'Idle' flag.
<PRE>
DELETE usersUtenti
FROM usersUtenti as u
JOIN user_flagsUtenti_flags as f
ON u.id=f.id
WHERE f.name = 'Idle'
</PRE>
 
==Criticism Critiche ==
{{citazione necessaria|Secondo i critici le nuove funzionalità di Transact-SQL non soltanto rompono la compatibilità con il linguaggio SQL standard, ma contraddicono anche l'assunto secondo cui SQL è concepito per essere un linguaggio di tipo esclusivamente [[Programmazione dichiarativa|dichiarativo]] (come effettivamente era, almeno fino alla versione standard del 1999 di [[SQL]]). In altre parole, le funzionalità aggiuntive di Transact-SQL sarebbero state implementate introducendo di fatto un vero e proprio nuovo linguaggio di tipo [[Programmazione imperativa|imperativo]], con una soluzione confusa e poco lineare, quando invece, secondo i critici, le medesime funzionalità sarebbero potute essere implementate utilizzando un altro layer di programmazione, oppure mediante lo stesso SQL.}}
Critics of Transact-SQL say that not only do the additional features break compatibility with standard SQL, but they also break the discrete modular scope which SQL was intended to occupy as an exclusively [[declarative programming|declarative]] language (up until the 1999 version of the [[SQL]] standard). In other words, the additional functionality found in Transact-SQL would, according to the original concept of SQL, have been implemented with a separate [[imperative programming]] language and [[Embedded SQL]], and it muddies the waters when flow control, for example, may be implemented either in a programming language layer or in SQL itself.
 
==See alsoVoci correlate ==
* [[Microsoft SQL Server]]
* [[PL/SQL]]
*[[Adaptive Server Enterprise]]
* [[PL/SQL]]
*[[SQL]]
*[[Sqsh]] - open source Transact-SQL client
 
== Collegamenti esterni ==
==External links==
*[ {{cita web|http://msdn2.microsoft.com/en-us/library/aa260642(SQL.80).aspx |Transact-SQL Reference for SQL Server 2000 (MSDN)]|lingua=en}}
*[ {{cita web|http://msdn2.microsoft.com/en-us/library/ms189826.aspx |Transact-SQL Reference for SQL Server 2005 (MSDN)]|lingua=en}}
*[ {{cita web|1=http://manuals.sybase.com/onlinebooks/group-as/asg1250e/refman |2=ASE Reference Manual]|lingua=en|accesso=14 dicembre 2007|urlarchivio=https://web.archive.org/web/20070810113825/http://manuals.sybase.com/onlinebooks/group-as/asg1250e/refman/|dataarchivio=10 agosto 2007|urlmorto=sì}}
*[ {{cita web|1=http://devguru.com/technologies/t-sql/ |2=DevGuru T-SQL Quick Reference]|lingua=en|accesso=14 dicembre 2007|urlarchivio=https://web.archive.org/web/20070713231204/http://devguru.com/technologies/t-sql/|dataarchivio=13 luglio 2007|urlmorto=sì}}
 
 
-->
 
{{Principali linguaggi di programmazione}}
 
[[Categoria:Linguaggi di programmazioneSQL]]
[[Categoria:Database]]
[[Categoria:Software per base dati]]
 
[[de:Transact SQL]]
[[en:Transact SQL]]
[[id:Transact-SQL]]
[[ja:Transact-SQL]]
[[ru:Transact-SQL]]