Stored procedure has multiple functions.
Step One: I need to retrieve an int
from a table, SUM
it with an @int
variable that is user entered. Then store that value back into the same column it was retrieved from. I.E. We have one, we order one, add one because we now have two because that item is already in inventory.
Here’s what I have so far:
BEGIN SET NOCOUNT ON; DECLARE @TotalOnHand INT; SELECT ( Select Sum(TotalOnHand) FROM (Values (InvTotalQtyOnHand), (@InvTotalQtyOnHand)) as TSum(TotalOnHand) ) FROM InventoryMaster_tbl INNER JOIN PurchaseOrderItems_tbl PartManufPartNum On PartManufPartNum = InvManPartNumber WHERE POItemsID = @POItemsID UPDATE [InventoryMaster_tbl] SET InvTotalQtyOnHand = @TotalOnHand END
When ran I see the InvTotalQtyOnHand now = 2 (there was one in the column and user entered 1 = 2 in the qry results window
Error I get:
Cannot insert the value NULL into column ‘InvTotalQtyOnHand’, table ‘TrackLinq.dbo.InventoryMaster_tbl’; column does not allow nulls. UPDATE fails.
Obviously InvTotalQtyOnHand
becomes Null
since @TotalOnHand = null
First post here so be nice. I’ve researched this site for years… I know how it can be… 🙂 I hope I was concise enough for you all.
Thanks in advance.
Advertisement
Answer
You didn’t assign value to @TotalOnHand
so the value is null
. You can do it in a following way.
BEGIN SET NOCOUNT ON; DECLARE @TotalOnHand INT; --newly declared, not assigned. NULL SELECT @TotalOnHand = ( Select Sum(TotalOnHand) FROM (Values (InvTotalQtyOnHand), (@InvTotalQtyOnHand)) as TSum(TotalOnHand) ) FROM InventoryMaster_tbl INNER JOIN PurchaseOrderItems_tbl PartManufPartNum On PartManufPartNum = InvManPartNumber WHERE POItemsID = @POItemsID UPDATE [InventoryMaster_tbl] SET InvTotalQtyOnHand = @TotalOnHand -- now assigned --you forget filter. All rows will be updated where <some condition> END
In fact you don’t need first select
statement. You can do update
directly.
UPDATE [InventoryMaster_tbl] SET InvTotalQtyOnHand = InvTotalQtyOnHand + @InvTotalQtyOnHand --comes from SP parameters FROM InventoryMaster_tbl INNER JOIN PurchaseOrderItems_tbl PartManufPartNum On PartManufPartNum = InvManPartNumber WHERE POItemsID = @POItemsID --comes from SP parameters