У меня есть один запрос, как показано ниже, у меня может быть более хороший запрос, чем этот, или он правильно закодирован? Любое предложение будет полезно для меня.Состояние проверки хранимой процедуры SQL Server и обновление/вставка
ALTER Procedure [dbo].[TransferStockFromWarehouse]
@ItemCode varchar(200) = NULL,
@ToWarehouse varchar(150) = NULL,
@FromWarehouse varchar(150) = NULL,
@Qty decimal = NULL
AS
DECLARE @RealPrice decimal(18,2) = NULL
SET @RealPrice = (SELECT Price
FROM StockInWarehouse
WHERE ItemCode = @ItemCode
AND WarehouseName = @ToWarehouse)
IF EXISTS (SELECT ItemCode
FROM StockInWarehouse
WHERE ItemCode = @ItemCode
AND WarehouseName = @ToWarehouse)
BEGIN
UPDATE StockInWarehouse
SET Qty = Qty + @Qty
WHERE ItemCode = @ItemCode
AND WarehouseName = @ToWarehouse
END
ELSE IF (@RealPrice > 0) OR (@RealPrice IS NOT NULL)
BEGIN
INSERT INTO StockInWarehouse(ItemCode, ItemName, WarehouseName, Price, Qty)
VALUES (@ItemCode,
(SELECT ItemName
FROM ItemMaster
WHERE ItemCode = @ItemCode), @ToWarehouse,
(SELECT Price
FROM StockInWarehouse
WHERE ItemCode = @ItemCode AND WarehouseName = @FromWarehouse), @Qty)
END
ELSE
BEGIN
INSERT INTO StockInWarehouse(ItemCode, ItemName, WarehouseName, Price, Qty)
VALUES (@ItemCode,
(SELECT ItemName
FROM ItemMaster
WHERE ItemCode = @ItemCode),
@ToWarehouse,
(SELECT Price
FROM StockInWarehouse
WHERE ItemCode = @ItemCode AND WarehouseName = @FromWarehouse),
@Qty)
END
BEGIN
UPDATE StockInWarehouse
SET Qty = Qty - @Qty
WHERE ItemCode = @ItemCode AND WarehouseName = @FromWarehouse
END
И иногда это не добавляет количеству Товаров, но в то же время вычитается из магазина. Не все время это происходит.
Если это работает так, как вы хотите, чтобы это сработало, то все в порядке, единственное, что нужно свести к минимуму в хранимой процедуре, это использовать join, делая вложенный SELECT лучше, чем использование объединений, вложенные операторы SELECT ускорят выполнение. –
Да, я не могу сказать, что он работает правильно, чувствует, что я делаю неправильно. – NAJEEB