Code SQL Server Trigger

4 517 4
Code SQL Server Trigger

Đang tải... (xem toàn văn)

Thông tin tài liệu

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 ) printkhong the xoa; else begin delete(OrderID=sod.SalesOrderID) end printKhong xoa duoc; rollback transaction; end

Cau: Viết trigger cho thao tác delete bảng Sales.SalesOrderHeader có thao tác xóa bảng kiểm tra sản phẩm có tồn Sales.SalesOrderDetail không Nếu tồn thông báo xóa, ngược lại 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 = 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] + 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 > 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 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 Header/ OrderDetail Viết trigger trgInsertOrderDetail để đáp ứng yêu cầu nghiệp vụ sau “khi PurchaseOrder lúc phát sinh nhiều hà g bảng chi tiết purchaseorder tổng số tiền từ hà ng mớ i nàphải cộng dồn vàtrường SubTotal purchaseorder 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 Tạo trigger kiểm tra nhập thêm nhân viên mớ i và O phòng Production có là m vượt số nhân viên quy định phòng la 280, có hủy bỏ việc nhập mớ i nà y create trigger ChekNV on SELECT * FROM HumanResources.Employee SELECT * FROM HumanResources.Department ... @level1type=N'TABLE',@level1name=N'SalesOrderHeader', @level2type=N 'TRIGGER' ,@level2name=N'uSalesOrderHeader' GO sua ten > khong cho > trigger kiem soat viec UPDATE(LastName) ten create trigger CheckTen on Person.Person for... purchaseorder bảng purchaseorderheader” tao trigger cho thao tac INSERT tren PurchaseOrderDEtail update lai Subtotal tren Purchasing.PurchaseOrderHeader CREATE TRIGGER ABC ON Purchasing.PurchaseOrderDetail... inserted) END END Tạo trigger kiểm tra nhập thêm nhân viên mớ i và O phòng Production có là m vượt số nhân viên quy định phòng la 280, có hủy bỏ việc nhập mớ i nà y create trigger ChekNV on

Ngày đăng: 06/12/2016, 11:47

Tài liệu cùng người dùng

Tài liệu liên quan