#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
Я столкнулся с проблемой. У меня есть две таблицы 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
Комментарии:
1. Таблица DLL, образцы данных и т.д. было бы неплохо.
Ответ №1:
Ошибка, которую вы получаете, указывает на то, что один из следующих подзапросов возвращает несколько строк и его необходимо изменить, чтобы возвращать только одну строку:
[ProductName] = SELECT [ProductCode] FROM [dbo].[PurchaseInvoiceDetails] WHERE [ProductName] = 'Makki Rusk'
[ProductName] = (SELECT [ProductName] FROM [dbo].[PurchaseInvoiceDetails] WHERE [ProductName] = 'Makki Rusk')
Ответ №2:
Вероятно, вам не нужно заново устанавливать код и имя, поэтому просто установите один столбец:
UPDATE [dbo].[FreshStock]
SET [Stock] = (SELECT SUM([Box])
FROM [dbo].[PurchaseInvoiceDetails]
WHERE [ProductName] = 'Makki Rusk'
)
WHERE ProductName = 'Makki Rusk';
Комментарии:
1. @Gordon Linoff Спасибо