techIT.ro Do we have a problem? Let's tech it!    












Daca ai impresia ca educatia e scumpa,
atunci încearca sa vezi cum e ignoranta.
Andy McIntyre









Home  |  Dictionar IT  |  Download  |  Forum  |  Despre noi  |  Contact

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)

Tabelele utilizate în exemplu

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 10
spAddFile 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




  


  Adauga un comentariuSpune-ti parerea despre acest articol!