我想创建一个更新和插入Inventoryset表的触发器。
当数量改变且小于0时,我希望我的表ProductSet中的Instock被更改,如果数量大于0.
我的尝试根本不起作用。
-- Creating table 'ProductSet'
CREATE TABLE [dbo].[ProductSet] (
[ProductId] int IDENTITY(1,1) NOT NULL,
[ProductName] nvarchar(max) NOT NULL,
[Description] nvarchar(max) NOT NULL,
[ImagePath] nvarchar(max) NOT NULL,
[UnitPrice] float NOT NULL,
[CategoryId] int NOT NULL,
[InStock] bit NOT NULL
);
GO
-- Creating table 'InventorySet'
CREATE TABLE [dbo].[InventorySet] (
[InventoryId] int IDENTITY(1,1) NOT NULL,
[Quantity] int NOT NULL,
[ProductId] int NOT NULL
);
GO
我知道这是错的,但是你走了。 :P
CREATE TRIGGER [dbo].[TestTrigger]
ON [dbo].[InventorySet]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF (SELECT dbo.InventorySet.Quantity) > 0
THEN INSERT INTO dbo.ProductSet (InStock) VALUE (1)
ELSE
INSERT INTO dbo.ProductSet (InStock) VALUE (2)
END
GO
这就是我现在所拥有的:
-- Initierar databasen
CREATE TRIGGER [dbo].[InStockTrigger]
ON [dbo].[InventorySet]
INSTEAD OF INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
Declare @Quantity BIT
SELECT @Quantity = dbo.InventorySet.Quantity FROM dbo.InventorySet
IF @Quantity > 0
BEGIN
INSERT INTO dbo.ProductSet (InStock) VALUES (1)
END
ELSE
INSERT INTO dbo.ProductSet (InStock) VALUES (2)
END
GO
但是当我添加它时,我希望它更新InStock(因为我编写了我的触发器),但事实并非如此。
SET IDENTITY_INSERT InventorySet ON
insert into InventorySet (InventoryId, Quantity, ProductId) values (1, 25, 1);
insert into InventorySet (InventoryId, Quantity, ProductId) values (2, 31, 2);
insert into InventorySet (InventoryId, Quantity, ProductId) values (3, 2, 3);
insert into InventorySet (InventoryId, Quantity, ProductId) values (4, 0, 4);
SET IDENTITY_INSERT InventorySet OFF
GO
相反,我得到了这个错误:
Msg 515,Level 16,State 2,Procedure InStockTrigger,309行 无法将值NULL插入列'ProductName',表'ModelFirst.SupplementStore.dbo.ProductSet';列不允许空值。 INSERT失败。 声明已经终止。
答案 0 :(得分:0)
您在插入,更新后使用。仅在插入运行后触发,而不是触发而不是插入或删除,因此您可以访问插入/删除表,如果您需要它们
您需要使用INSTEAD OF。 Sql Server Authority有一篇关于它的更好的博客文章imo
CREATE TRIGGER [dbo].[TestTrigger]
ON [dbo].[InventorySet]
INSTEAD INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
- 现在检查一下,如果你有你想要的instock数量并且做你的魔法。如果你发布你的 - 表格架构我可以帮助解决这个问题
GO