Tải bản đầy đủ (.docx) (4 trang)

Code SQL Server Trigger

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (36.86 KB, 4 trang )

--Cau: Viết trigger cho thao tác delete trên bảng Sales.SalesOrderHeader
khi có thao tác xóa trên
--bảng này thì kiểm tra sản phẩm đó có tồn tại trên
Sales.SalesOrderDetail không. Nếu tồn tại thì
-- thông báo không thể xóa, ngược lại thì xóa sản phẩm đó.
create trigger check_delete
on Sales.SalesOrderHeader
for delete
as
declare @OrderID int
begin
if exists (
SELECT
sod.SalesOrderID, soh.SalesOrderID AS Expr1
FROM
Sales.SalesOrderDetail sod JOIN
Sales.SalesOrderHeader soh ON
sod.SalesOrderID = soh.SalesOrderID
where sod.SalesOrderID = soh.SalesOrderID
)
print'khong the xoa';
else
begin
delete(@OrderID=sod.SalesOrderID)
end
print'Khong xoa duoc';
rollback transaction;
end
------USE [AdventureWorks2008R2]
GO
/****** Object: Trigger [Sales].[uSalesOrderHeader]


10/14/2016 15:42:35 ******/
SET ANSI_NULLS ON
GO

Script Date:

SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [Sales].[uSalesOrderHeader] ON [Sales].[SalesOrderHeader]
AFTER UPDATE NOT FOR REPLICATION AS
BEGIN
DECLARE @Count int;
SET @Count = @@ROWCOUNT;
IF @Count = 0
RETURN;


SET NOCOUNT ON;
BEGIN TRY
-- Update RevisionNumber for modification of any field EXCEPT the
Status.
IF NOT UPDATE([Status])
BEGIN
UPDATE [Sales].[SalesOrderHeader]
SET [Sales].[SalesOrderHeader].[RevisionNumber] =
[Sales].[SalesOrderHeader].[RevisionNumber] + 1
WHERE [Sales].[SalesOrderHeader].[SalesOrderID] IN
(SELECT inserted.[SalesOrderID] FROM inserted);
END;
-- Update the SalesPerson SalesYTD when SubTotal is updated

IF UPDATE([SubTotal])
BEGIN
DECLARE @StartDate datetime,
@EndDate datetime
SET @StartDate = [dbo].[ufnGetAccountingStartDate]();
SET @EndDate = [dbo].[ufnGetAccountingEndDate]();
UPDATE [Sales].[SalesPerson]
SET [Sales].[SalesPerson].[SalesYTD] =
(SELECT SUM([Sales].[SalesOrderHeader].[SubTotal])
FROM [Sales].[SalesOrderHeader]
WHERE [Sales].[SalesPerson].[BusinessEntityID] = [Sales].
[SalesOrderHeader].[SalesPersonID]
AND ([Sales].[SalesOrderHeader].[Status] = 5) -Shipped
AND [Sales].[SalesOrderHeader].[OrderDate] BETWEEN
@StartDate AND @EndDate)
WHERE [Sales].[SalesPerson].[BusinessEntityID]
IN (SELECT DISTINCT inserted.[SalesPersonID] FROM
inserted
WHERE inserted.[OrderDate] BETWEEN @StartDate AND
@EndDate);
-- Update the SalesTerritory SalesYTD when SubTotal is
updated
UPDATE [Sales].[SalesTerritory]
SET [Sales].[SalesTerritory].[SalesYTD] =
(SELECT SUM([Sales].[SalesOrderHeader].[SubTotal])
FROM [Sales].[SalesOrderHeader]
WHERE [Sales].[SalesTerritory].[TerritoryID] = [Sales].
[SalesOrderHeader].[TerritoryID]
AND ([Sales].[SalesOrderHeader].[Status] = 5) -Shipped
AND [Sales].[SalesOrderHeader].[OrderDate] BETWEEN

@StartDate AND @EndDate)
WHERE [Sales].[SalesTerritory].[TerritoryID]
IN (SELECT DISTINCT inserted.[TerritoryID] FROM inserted


WHERE inserted.[OrderDate] BETWEEN @StartDate AND
@EndDate);
END;
END TRY
BEGIN CATCH
EXECUTE [dbo].[uspPrintError];
-- Rollback any active or uncommittable transactions before
-- inserting information in the ErrorLog
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION;
END
EXECUTE [dbo].[uspLogError];
END CATCH;
END;
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'AFTER
UPDATE trigger that updates the RevisionNumber and ModifiedDate columns
in the SalesOrderHeader table.Updates the SalesYTD column in the
SalesPerson and SalesTerritory tables.' ,
@level0type=N'SCHEMA',@level0name=N'Sales',
@level1type=N'TABLE',@level1name=N'SalesOrderHeader',
@level2type=N'TRIGGER',@level2name=N'uSalesOrderHeader'
GO


--1. --sua ten --> khong cho --> trigger kiem soat viec UPDATE(LastName)
ten
create trigger CheckTen
on Person.Person
for update
as
begin
if UPDATE (LastName)
RAISERROR('Khong duoc sua ten',16,1)
ROLLBACK TRANSACTION
end
--2. Header/ OrderDetail
--Viết trigger trgInsertOrderDetail để đáp ứng yêu cầu nghiệp vụ sau “khi
--một PurchaseOrder cùng lúc phát sinh nhiều hà
g trong bảng chi tiết
--purchaseorder thì tổng số tiền từ các hà
ng mớ
i nàphải được cộng dồn
--vàtrường SubTotal của chính purchaseorder đó trong bảng
--purchaseorderheader”
--tao trigger cho thao tac INSERT tren PurchaseOrderDEtail
--update lai Subtotal tren Purchasing.PurchaseOrderHeader
CREATE TRIGGER ABC
ON Purchasing.PurchaseOrderDetail


AFTER INSERT
AS
BEGIN
IF EXISTS(SELECT PurchaseOrderID FROM inserted

WHERE PurchaseOrderID IN(SELECT PurchaseOrderID FROM
Purchasing.PurchaseOrderHeader))
BEGIN
UPDATE Purchasing.PurchaseOrderHeader
SET SubTotal = SubTotal + (Select
sum(unitprice*OrderQty) from inserted)
where PurchaseOrderID in (select PurchaseOrderID from
inserted)
END
END
--3 Tạo trigger kiểm tra khi nhập thêm nhân viên mớ
i và
O phòng Production
--có là
m vượt quá số nhân viên quy định của phòng la 280, nếu có thì hủy
--bỏ việc nhập mớ
i nà
y
create trigger ChekNV
on
SELECT * FROM HumanResources.Employee
SELECT * FROM HumanResources.Department



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×