小编典典

SQL子查询返回了多个值

sql

我的查询导致以下错误:

消息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子句。


阅读 209

收藏
2021-04-28

共1个答案

小编典典

我怀疑问题出在此字符串中(您的代码中的第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)返回多个行,所以您遇到了错误。

您将其inserted视为一个单行表(例如,从中获取参数,例如SELECT @ItemNo = I.ItemNo, @ItemDescription = I.ItemDescription FROM Inserted I,但inserted表可以包含多行。因此,在您的情况下,我认为您有3个选项-
检查是否仅插入了1行,将触发器重写为基于集合的触发器或使用游标。

这是带有一些类似示例的sql小提琴

2021-04-28