Exemplu de utilizare a tranzacţiilor în T-SQL
În exemplul de mai jos este descrisă o modalitate de utilizare a tranzacţiilor. Ceea ce se doreşte este ca atunci când se introduce o înregistrare în tabelul Files să se introducă o înregistrare în tabelul FileSharing. În cazul în care inserarea uneia dintre înregistrări, în unul dintre tabele eşuează, cealaltă inserare se anulează şi ea.De asemenea, exemplul de mai jos arată şi modul în care un parametru al unei proceduri stocate poate primi o valoare implicită (@GroupID AS INT = NULL).
Se dau două tabele, unul care conţine fişiere (Files):
CREATE TABLE Files (FileID INT PRIMARY KEY IDENTITY, UserID INT, FileURL VARCHAR(100) NULL)
şi unul care conţine informaţiile privind partajarea fişierelor către unele grupuri de utilizatori (FileSharing):
CREATE TABLE FileSharing ([ID] INT PRIMARY KEY IDENTITY, FileID INT FOREIGN KEY REFERENCES File (FileID), GroupID INT)

Se doreşte scrierea unei proceduri stocate pentru inserarea unor noi fişiere în
tabela Files.
Atunci utilizatorul va alege ca noul fişier să fie partajat unui grup de utilizatori
inserarea înregistrării noi în tabela FileSharing să se facă în
aceeaşi procedură stocată.
-------------------------------------------------
-- Procedura stocată:
-------------------------------------------------
CREATE PROCEDURE
spAddFile
@FileID AS INT OUTPUT,
@UserID AS INT,
@FileURL AS VARCHAR (100) = NULL,
@GroupID AS INT = NULL
AS
-- declararea variabilei pentru stocarea eventualelor erori
DECLARE @err INT
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
-------------------------------------------------------------------------------------------------------------
-- ÎNCEPUTUL TRANZACŢIEI !!! ---------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
BEGIN TRANSACTION
-- insert în tabela de Files
INSERT INTO File (UserID, FileURL)
VALUES (@UserID, @FileURL)
SET @err = @@ERROR
IF @err <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN @err
END
ELSE
BEGIN
SELECT @FileID = @@IDENTITY
END
-- daca se doreste ca fişierul sa fie vizibil si pentru un grup de utilizatori (ceea ce înseamnă: @GroupID IS NOT NULL)
IF @GroupID IS NOT NULL
BEGIN
INSERT INTO FileSharing (FileID, GroupID)
VALUES (@FileID, @GroupID)
SET @err = @@ERROR
IF @err <> 0
BEGIN
ROLLBACK TRANSACTION
RETURN @err
END
END
-------------------------------------------------------------------------------------------------------------
-- ÎNCHEIEREA TRANZACŢIEI ----------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
COMMIT TRANSACTION
SET NOCOUNT OFF
SET ANSI_WARNINGS ON
GO
Exemple de utilizare:
-- pentru inserarea unui fişier, de către utilizaturul cu ID-ul 3 partajat grupului cu ID-ul 10spAddFile null, 3, './path/filename.jpg', 10
-- pentru inserarea unui fişier, de către utilizaturul cu ID-ul 3 nepartajat
spAddFile null, 3, './path/filename.jpg'
techit.ro
Colecţia: Exemple de cod
Articolul precedent: Exemplu de utilizare de SQL generat: mutarea unor rânduri (înregistrări) pe coloane
Spune-ti parerea despre acest articol!
|
|
|
Colecţiile techIT.ro
Căutare după tag:
Topul celor mai citite articole
Spune-ti parerea despre acest articol!