sherloach / QuanLyVatTu_CSDLPT_PTITHCM

Đồ án môn Cơ Sở Dữ Liệu Phân Tán
13 stars 6 forks source link

UPDATE SP CHUYENCHINHANH #1

Closed QuangHuy2309 closed 3 years ago

QuangHuy2309 commented 3 years ago

USE [QLVT_DATHANG] GO /** Object: StoredProcedure [dbo].[SP_CHUYENCHINHANH_NV] Script Date: 12/1/2020 11:36:15 **/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[SP_CHUYENCHINHANH_NV] @MANV INT, @MACN nchar(10) AS DECLARE @LGNAME VARCHAR(50) DECLARE @USERNAME VARCHAR(50)

SET XACT_ABORT ON; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRY

    BEGIN TRAN
    -- Kiểm tra xem bên Site chuyển tới đã có dữ liệu nhân viên đó chưa. Nếu có rồi thì đổi trạng thái, chưa thì thêm vào
    IF EXISTS(SELECT * FROM LINK1.QLVT_DATHANG.dbo.NhanVien WHERE MANV = @MANV)
    BEGIN
        UPDATE LINK1.QLVT_DATHANG.dbo.NhanVien
        SET TrangThaiXoa = 0
        WHERE MANV = @MANV;
        --UPDATE dbo.NhanVien
        --SET TrangThaiXoa = 1
        --WHERE MANV = @MANV;
    END
    ELSE
    BEGIN
        INSERT INTO LINK1.QLVT_DATHANG.dbo.NhanVien (MANV, HO, TEN, DIACHI, NGAYSINH, LUONG, MACN, TRANGTHAIXOA)
        SELECT MANV, HO, TEN, DIACHI, NGAYSINH, LUONG, MACN = @MACN, TRANGTHAIXOA
        FROM dbo.NhanVien
        WHERE MANV = @MANV;
        --UPDATE dbo.NhanVien
        --SET TrangThaiXoa = 1
        --WHERE MANV = @MANV;
    END
    --Kiểm tra xem Nhân viên được chuyển có lập bất kì đơn nào chưa. Nếu chưa xóa luôn nhân viên đó, nếu có thì đổi trạng thái xóa
    IF EXISTS(SELECT 1 FROM NhanVien
            WHERE NhanVien.MANV = @MANV AND             
            (EXISTS(SELECT 1 FROM PhieuNhap WHERE PhieuNhap.MANV = NhanVien.MANV) 
                OR EXISTS(SELECT MAPX FROM PhieuXuat WHERE PhieuXuat.MANV = NhanVien.MANV) 
                    OR EXISTS(SELECT MasoDDH FROM DatHang WHERE DatHang.MANV = NhanVien.MANV)))
    BEGIN 
        UPDATE dbo.NhanVien
        SET TrangThaiXoa = 1
        WHERE MANV = @MANV;
    END
    ELSE
    BEGIN
        DELETE FROM NhanVien Where NhanVien.MANV = @MANV
    END
    COMMIT TRAN;
    -- Kiểm tra xem Nhân viên đã có login chưa. Có thì xóa
    IF EXISTS(SELECT SUSER_SNAME(sid) FROM sys.sysusers WHERE name = CAST(@MANV AS NVARCHAR))
    BEGIN
    SET @LGNAME = CAST((SELECT SUSER_SNAME(sid) FROM sys.sysusers WHERE name = CAST(@MANV AS NVARCHAR)) AS VARCHAR(50))
    SET @USERNAME = CAST(@MANV AS VARCHAR(50))
    EXEC SP_DROPUSER @USERNAME;
    EXEC SP_DROPLOGIN  @LGNAME;
    END

END TRY BEGIN CATCH IF (@@TRANCOUNT > 0) BEGIN ROLLBACK TRAN; END; THROW; END CATCH