Sql server 创建插入触发器
这是我的代码:Sql server 创建插入触发器,sql-server,tsql,triggers,Sql Server,Tsql,Triggers,这是我的代码: USE MyGuitarshop GO CREATE TRIGGER Products_INSERT ON Products FOR INSERT AS BEGIN UPDATE Products SET DateAdded = GETDATE() WHERE DateAdded IS NULL; END; GO USE MyGuitarShop INSERT INTO Products (CategoryID, ProductCode, Produ
USE MyGuitarshop
GO
CREATE TRIGGER Products_INSERT
ON Products
FOR INSERT
AS
BEGIN
UPDATE Products
SET DateAdded = GETDATE()
WHERE DateAdded IS NULL;
END;
GO
USE MyGuitarShop
INSERT INTO Products (CategoryID, ProductCode, ProductName, Description, ListPrice, DiscountPercent, DateAdded)
VALUES (1, '229985', 'Quartz Watch', 'Lovely watch with a quartz face', 29.99, 12, NULL);
GO
USE MyGuitarShop
SELECT * FROM Products
弹出此错误:Msg 512,16级,状态1,程序产品更新,第13行[批处理起始行21]
子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时
我不明白这个错误,也不知道如何修复它。有人能给我指一下正确的方向吗?试试看
updateinserted SET DateAdded=GETDATE(),其中DateAdded为NULL;结束
您不能使用带有NULL
的常规比较运算符-任何与NULL
比较的内容都未定义,因此为“false”
使用NULL
检查的唯一方法是使用is NULL
或is NOT NULL
:
UPDATE Products
SET DateAdded = GETDATE()
WHERE DateAdded IS NULL;
触发器是高度特定于供应商的-因此请添加一个标记,以指定您使用的是
mysql
、postgresql
、sql server
、oracle
或db2
,还是其他完全相同的东西。如果我们做了您的家庭作业。。在现实世界中,你将从谁那里得到帮助:)我一直在想,老师们在布置了这样的家庭作业后,是否会观看SO板。@marc_s-抱歉。我添加了正确的标记。由于触发器没有引用表,因此它将更新DateAdded为NULL的所有行(如果已修复),而不仅仅是导致触发器触发的语句插入的行。不是触发器的典型行为。where谓词的计算结果永远不会为true,因为任何值都不等于NULL。您是对的。我匆忙地写了那封信。我已经编辑了我的答案。这是假设表中没有以前用空DateAdd值输入的记录,对吗?@dfundako:就我所理解的给定任务而言,此触发器应该更新所有已DateAdd为空的行,而不管这些行是刚刚插入的还是已经存在的。所以是的-此触发器将更新数据库表中具有DateAdded
列且NULL
@marc\s的所有行,非常感谢!这段代码早些时候不起作用,但我必须重新启动我的计算机(这很困难),一旦我重新启动并再次尝试这段代码,它就工作得很好,我在日期中的所有空行都填入了今天的日期。非常感谢你的时间和帮助。我真的很感激。@Krystianya:如果这个答案帮助你解决了你的问题,那么请。这将表示你对那些花时间帮助你的人的感激。@marc_抱歉。我是stackoverflow新手,所以我不知道如何单击复选标记。但我现在已经这么做了。我点击了向上箭头,因为我认为我应该这么做。我很抱歉疏忽了。谢谢你引起我的注意。