Подзапрос вернул более 1 значения Как исправить - PullRequest
0 голосов
/ 16 апреля 2019

Я столкнулся с проблемой.У меня есть две таблицы FreshStock и PurchaseInvoiceDetails.

Когда новый продукт получен, он входит в PurchaseInvoiceDetails, и я хочу, чтобы он также вошел во вторую таблицу.

У меня есть код, который сначала проверяет, не был ли продукт добавлен вFreshStock, затем он сначала добавляет его, но если он уже добавил его, он обновляет его по ProductName.Я получаю сообщение об ошибке при обновлении:

Сообщение 512, Уровень 16, Состояние 1, Строка 13
Подзапрос возвратил более 1 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.Заявление было прекращено.

Мой код:

IF NOT EXISTS(SELECT * FROM [dbo].[FreshStock] WHERE [ProductName] = 'Makki Rusk')
BEGIN
    INSERT INTO [dbo].[FreshStock] ([ProductCode], [ProductName], [Stock],[IsAvailable])
        SELECT [ProductCode], [ProductName], SUM([Box]), 1
        FROM [dbo].[PurchaseInvoiceDetails]
        WHERE ProductName = 'Makki Rusk'
        GROUP BY [ProductCode],[ProductName]

    RETURN
END

IF  EXISTS(SELECT * FROM [dbo].[FreshStock] WHERE [ProductName] = 'Makki Rusk')
BEGIN
    UPDATE [dbo].[FreshStock]
    SET [ProductCode] = (SELECT [ProductCode] 
                         FROM [dbo].[PurchaseInvoiceDetails] 
                         WHERE [ProductName] = 'Makki Rusk'),
        [ProductName] = (SELECT [ProductName] 
                         FROM [dbo].[PurchaseInvoiceDetails] 
                         WHERE [ProductName] = 'Makki Rusk'),
        [Stock] = (SELECT SUM([Box])  
                   FROM [dbo].[PurchaseInvoiceDetails] 
                   WHERE [ProductName] = 'Makki Rusk')
     WHERE ProductName = 'Makki Rusk'
END

Ответы [ 2 ]

2 голосов
/ 16 апреля 2019

Полученная ошибка указывает на то, что один из следующих подзапросов возвращает несколько строк, и его необходимо изменить, чтобы он возвращал только одну строку:

[ProductName] = SELECT [ProductCode] FROM [dbo].[PurchaseInvoiceDetails] WHERE [ProductName] = 'Makki Rusk'
[ProductName] = (SELECT [ProductName] FROM [dbo].[PurchaseInvoiceDetails] WHERE [ProductName] = 'Makki Rusk')
1 голос
/ 16 апреля 2019

Возможно, вам не нужно заново устанавливать код и имя, поэтому просто установите один столбец:

UPDATE [dbo].[FreshStock]
SET [Stock] = (SELECT SUM([Box])
               FROM [dbo].[PurchaseInvoiceDetails]
               WHERE [ProductName] = 'Makki Rusk'
              )
WHERE  ProductName = 'Makki Rusk';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...