Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 创建插入触发器_Sql Server_Tsql_Triggers - Fatal编程技术网

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新手,所以我不知道如何单击复选标记。但我现在已经这么做了。我点击了向上箭头,因为我认为我应该这么做。我很抱歉疏忽了。谢谢你引起我的注意。