Ich habe eine folgende Abfrage, um den verfügbaren Bestand des Produktbestandsstamms vom Verkaufsstamm zu aktualisieren. Es zeigt einen Fehler an, wenn die Verkaufstabelle denselben prd_code hat. Ich verwende Rechnungsnr für eine Bedingung, aber es nimmt alle Datensätze aus Sales-Master. Meine INVOICE_NO Bedingung funktioniert hier nicht.Unterabfrage hat mehr als 1 Wert zurückgegeben. Dies ist nicht zulässig, wenn die Unterabfrage folgt =,! =, <, <= , >,> = in SQL Server 2012
DECLARE @LoopCounter INT = 1, @MaxCounts INT = (select distinct Count(prd_code) from SALES_D_ORG where [email protected]_NO)
WHILE(@LoopCounter <= @MaxCounts)
BEGIN
update prd_stock set AVAILABLE_STOCK=((select AVAILABLE_STOCK from prd_stock where PRD_CODE=
(Select PRD_CODE From
(Select Row_Number() Over (Order By AUTO_NO) As RowNum, * From SALES_D_ORG Where [email protected]_NO) t2
Where RowNum = @LoopCounter))-(select qty from SALES_D_ORG where PRD_CODE=
(Select PRD_CODE From
(Select Row_Number() Over (Order By AUTO_NO) As RowNum, * From SALES_D_ORG Where [email protected]_NO) t2
Where RowNum = @LoopCounter))) where PRD_CODE=(Select PRD_CODE From
(Select Row_Number() Over (Order By AUTO_NO) As RowNum, * From SALES_D_ORG Where [email protected]_NO) t2
Where RowNum = @LoopCounter)
SET @LoopCounter = @LoopCounter + 1
END
Die Unterabfrage gibt mehr als einen Wert an einer Stelle in Ihrer Abfrage zurück, wo dies keinen Sinn ergibt. Die Fehlermeldung kann nicht klarer sein. –
Ihre Unterabfrage gibt mehr als 1 Zeile zurück. Wenn Sie also nur einen Zeilen-Subselect benötigen, sollten Sie das Ergebnis begrenzen, ansonsten brauchen Sie mehr Zeilen. Insetad od = Sie sollten IN verwenden – scaisEdge
Danke Tim Biegeleisen und scaisEdge. Ich habe meinen Code als Ihr Vorschlag geändert. Jetzt funktioniert mein Code gut, wie ich erwartet habe. Das sieht wie folgt aus –