Transact-SQL - Transact-SQL

Transact-SQL ( T-SQL ) è l' estensione proprietaria di Microsoft e Sybase dell'SQL (Structured Query Language) utilizzato per interagire con i database relazionali . T-SQL espande lo standard SQL per includere programmazione procedurale , variabili locali , varie funzioni di supporto per elaborazione di stringhe, elaborazione di date, matematica, ecc. e modifiche alle istruzioni DELETE e UPDATE .

Transact-SQL è fondamentale per l'utilizzo di Microsoft SQL Server . Tutte le applicazioni che comunicano con un'istanza di SQL Server lo fanno inviando istruzioni Transact-SQL al server, indipendentemente dall'interfaccia utente dell'applicazione.

Le stored procedure in SQL Server sono routine eseguibili sul lato server. Il vantaggio delle stored procedure è la possibilità di passare parametri.

Variabili

Transact-SQL fornisce le istruzioni seguenti per dichiarare e impostare le variabili locali: DECLARE, SETe SELECT.

DECLARE @var1 NVARCHAR(30);
SET @var1 = 'Some Name';
SELECT @var1 = Name
  FROM Sales.Store
  WHERE CustomerID = 100;

Controllo del flusso

Parole controllo di flusso in Transact-SQL comprendono BEGINe END, BREAK, CONTINUE, GOTO, IFe ELSE, RETURN, WAITFOR, e WHILE.

IFe ELSEconsentire l'esecuzione condizionale. Questa istruzione batch stamperà "È il fine settimana" se la data corrente è un giorno del fine settimana o "È un giorno della settimana" se la data corrente è un giorno della settimana. (Nota: questo codice presuppone che la domenica sia configurata come primo giorno della settimana @@DATEFIRSTnell'impostazione.)

IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
   PRINT 'It is the weekend.';
ELSE
   PRINT 'It is a weekday.';

BEGINe ENDcontrassegnare un blocco di istruzioni . Se più di un'istruzione deve essere controllata dal condizionale nell'esempio sopra, possiamo usare BEGINe in ENDquesto modo:

IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1
BEGIN
   PRINT 'It is the weekend.';
   PRINT 'Get some rest on the weekend!';
END;
ELSE
BEGIN
   PRINT 'It is a weekday.';
   PRINT 'Get to work on a weekday!';
END;

WAITFORaspetterà per un determinato periodo di tempo o fino a una particolare ora del giorno. L'istruzione può essere utilizzata per ritardi o per bloccare l'esecuzione fino all'ora impostata.

RETURNviene utilizzato per tornare immediatamente da una stored procedure o una funzione.

BREAKtermina il WHILEciclo che lo racchiude , mentre CONTINUEprovoca l'esecuzione della successiva iterazione del ciclo. Di WHILEseguito viene fornito un esempio di ciclo.

DECLARE @i INT;
SET @i = 0;

WHILE @i < 5
BEGIN
   PRINT 'Hello world.';
   SET @i = @i + 1;
END;

Modifiche alle istruzioni DELETE e UPDATE

In Transact-SQL, entrambe le istruzioni DELETEe UPDATEsono migliorate per consentire l'utilizzo dei dati di un'altra tabella nell'operazione, senza la necessità di una sottoquery:

  • DELETEaccetta tabelle unite nella FROMclausola, in modo simile a SELECT. Al termine, il nome o l'alias da cui eliminare la tabella nel join viene inserito tra DELETEe FROM.
  • UPDATEconsente FROMdi aggiungere una clausola. La tabella da aggiornare può essere unita nella FROMclausola e referenziata tramite alias, oppure referenziata solo all'inizio dell'istruzione come da SQL standard.

Questo esempio elimina tutti userscoloro che sono stati contrassegnati con il flag 'Idle'.

DELETE u
  FROM users AS u
  INNER JOIN user_flags AS f
    ON u.id = f.id
    WHERE f.name = 'idle';

INSERTO ALL'INGROSSO

BULKè un'istruzione Transact-SQL che implementa un processo di caricamento dati in blocco, inserendo più righe in una tabella, leggendo i dati da un file sequenziale esterno. L'utilizzo di BULK INSERTrisultati in prestazioni migliori rispetto ai processi che emettono INSERTistruzioni individuali per ogni riga da aggiungere. Ulteriori dettagli sono disponibili in MSDN .

PROVA A PRENDERE

A partire da SQL Server 2005, Microsoft ha introdotto una TRY CATCHlogica aggiuntiva per supportare il comportamento del tipo di eccezione. Questo comportamento consente agli sviluppatori di semplificare il codice e di escludere il @@ERRORcontrollo dopo ogni istruzione di esecuzione SQL.

-- begin transaction
BEGIN TRAN;

BEGIN TRY
   -- execute each statement
   INSERT INTO MYTABLE(NAME) VALUES ('ABC');
   INSERT INTO MYTABLE(NAME) VALUES ('123');

   -- commit the transaction
   COMMIT TRAN;
END TRY
BEGIN CATCH
   -- roll back the transaction because of error
   ROLLBACK TRAN;
END CATCH;

Guarda anche

Riferimenti

link esterno