Transact-SQL: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
+Da tradurre +Categorizzare
m Categorie
 
(51 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 ==
<!--
KeywordsFra forle flow''keyword'' controlcon incui TrancentTransact-SQL includeimplementa il controllo di flusso si annoverano <code>BEGIN</code> ande <code>END</code>, <code>BREAK</code>, <code>CONTINUE</code>, <code>GOTO</code>, <code>IF</code> ande <code>ELSE</code>, <code>RETURN</code>, <code>WAITFOR</code>, ande <code>WHILE</code>.
==Control-of-flow Language Mechanisms ==
 
<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 è sabato o domenica, oppure "giorno feriale" negli altri casi.
Keywords for flow control in Trancent-SQL include <code>BEGIN</code> and <code>END</code>, <code>BREAK</code>, <code>CONTINUE</code>, <code>GOTO</code>, <code>IF</code> and <code>ELSE</code>, <code>RETURN</code>, <code>WAITFOR</code>, and <code>WHILE</code>.
 
<code>IF</code> and <code>ELSE</code> allow conditional execution. This batch statement will print "weekend" if the current date is a weekend day, or "weekday" if the current date is a weekday.
 
<pre>
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
PRINT 'ItÈ isun thegiorno weekendfestivo.'
ELSE
PRINT 'ItÈ isun agiorno weekdayferiale.'
</pre>
 
<code>BEGIN</code> e <code>END</code> delimitano un blocco di istruzioni. Se più istruzioni devono essere controllate dalle condizioni illustrate nel precedente esempio, si possono usare BEGIN e END in questo modo:
 
<code>BEGIN</code> and <code>END</code> mark a block of statements. If more than one statement is to be controlled by the conditional in the example above, we can use BEGIN and END like this:
 
<pre>
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
BEGIN
PRINT 'ItÈ isun thegiorno weekendfestivo.'
PRINT 'GetPrenditi someuna restvacanza!'
END
ELSE
BEGIN
PRINT 'ItÈ isun agiorno weekdayferiale.'
PRINT 'GetVa toa worklavorare!'
END
</pre>
 
<code>WAITFOR</code> aspetta per un certo lasso di tempo, oppure fino ad una data ora del giorno. Questa istruzione può essere usata per eseguire azioni ritardate oppure per bloccare l'esecuzione di un'operazione prima di raggiungere un determinato istante.
<code>WAITFOR</code> will wait for a given amount of time, or until a particular time of day. The statement can be used for delays or to block execution until the set time.
 
<code>RETURN</code> isè usedusata toper immediatelyuscire returnimmediatamente fromda auna [[stored procedure]] oroppure functionda una certa funzione.
 
<code>BREAK</code> endsprovoca thel'uscita enclosingda un loop che inizia con un <code>WHILE</code> loop, whilementre <code>CONTINUE</code> causesfa theeseguire nextil iterationciclo ofsuccessivo thedel loop. toPiù execute.avanti Anè exampleriportato ofun aesempio di loop <code>WHILE</code> loop is given below.
 
== Variabili locali ==
==Local variables==
 
Le variabili locali sono accessibili solo allo [[script]] che le utilizza. Transact-SQL non supporta variabili globali definite dall'utente.
Local variables are so named because they're local to the script executing them. Transact SQL doesn't support user-defined global variables.
 
<code>DECLARE</code> willdichiara declareuna a variablevariabile, givingattribuendole itun anome nameed andun a typetipo. ThePer SETattribuirle statementun canvalore besi usedusa to provide a valueSET, and thee variablesuccessivamente mayla bevariabile usedpuò inessere ausata statementutilizzandone byil referencingnome itscome nameriferimento.
 
ThisQuesto script declaresdichiara auna variablevariabile ascome an integerintero, initializesla itinizializza, thene poi usa usesun <code>WHILE</code> toper executeeseguire aun 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 also==
*[[Microsoft SQL Server]]
*[[Adaptive Server Enterprise]]
*[[PL/SQL]]
*[[SQL]]
*[[Sqsh]] - open source Transact-SQL client
 
==External links==
*[http://msdn2.microsoft.com/en-us/library/aa260642(SQL.80).aspx Transact-SQL Reference for SQL Server 2000 (MSDN)]
*[http://msdn2.microsoft.com/en-us/library/ms189826.aspx Transact-SQL Reference for SQL Server 2005 (MSDN)]
*[http://manuals.sybase.com/onlinebooks/group-as/asg1250e/refman ASE Reference Manual]
*[http://devguru.com/technologies/t-sql/ DevGuru T-SQL Quick Reference]
 
== Voci correlate ==
* [[Microsoft SQL Server]]
* [[PL/SQL]]
* [[SQL]]
 
== Collegamenti esterni ==
[[Category:SQL]]
*[ {{cita web|http://msdn2.microsoft.com/en-us/library/aa260642(SQL.80).aspx |Transact-SQL Reference for SQL Server 2000 (MSDN)]|lingua=en}}
[[Category:Data-centric programming languages]]
*[ {{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}}
-->
 
[[deCategoria:Transact SQL]]
[[en:Transact SQL]]
[[id:Transact-SQL]]
[[ja:Transact-SQL]]
[[ru:Transact-SQL]]
<noinclude>{{Categorizzare}}</noinclude>