我的查询导致以下错误:
消息512,级别16,状态1,过程Item_insupd,第17行 子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。
询问:
INSERT INTO [Total_Database].[dbo].[Item] ( ItemID, ItemNo, ItemDescription, Notes, StandardCost, SalesGLAccountID, ItemTypeID, Backorderable ) ( SELECT [nr], [nr], [Latijn]+' '+[Subgroep]+' '+CAST([nr] as VARCHAR(255)), [NL]+' '+[Vorm]+' '+[Kenmerk]+' '+[Hoogte],[Inkoopprijs], (4), (case when [Productgroep]='PB' then 1 else 5 end), (1) FROM [ACCESDATA].[dbo].[Planten] );
我怀疑这种情况的发生是因为我的子查询不包含WHERE,但是不幸的是,我不知道如何构造正确的WHERE子句。
WHERE
我怀疑问题出在此字符串中(您的代码中的第26行):
IF NOT (EXISTS (SELECT G.GLAccountID FROM GLAccnt G INNER JOIN Inserted I ON G.GLAccountID = I.SalesGLAccountID)) OR ((SELECT I.COGSGLAccountID FROM Inserted I) IS NOT NULL) AND NOT (EXISTS (SELECT G.GLAccountID FROM GLAccnt G INNER JOIN Inserted I ON G.GLAccountID = I.COGSGLAccountID))
看起来像(SELECT I.COGSGLAccountID FROM Inserted I)返回多个行,所以您遇到了错误。
(SELECT I.COGSGLAccountID FROM Inserted I)
您将其inserted视为一个单行表(例如,从中获取参数,例如SELECT @ItemNo = I.ItemNo, @ItemDescription = I.ItemDescription FROM Inserted I,但inserted表可以包含多行。因此,在您的情况下,我认为您有3个选项- 检查是否仅插入了1行,将触发器重写为基于集合的触发器或使用游标。
inserted
SELECT @ItemNo = I.ItemNo, @ItemDescription = I.ItemDescription FROM Inserted I
这是带有一些类似示例的sql小提琴。