Aşağıdaki gibi bir sorgum var, bundan daha iyi bir sorgu alabilir miyim, yoksa doğru şekilde kodlanmış mı? Herhangi bir öneri benim için yararlı olacaktır.SQL Server saklı yordam kontrol koşulu ve güncelleştir/ekle
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
Ve bazen Towarehouse miktar ama fromwarehouse düşülür aynı anda ekleyerek değildir. Her zaman değil.
Çalışmak istediğiniz şekilde çalışıyorsa, o zaman sorun yok, saklı yordamları en aza indirgeyecek tek şey birleştirme kullanmaktır, iç içe geçmiş bir SELECT yapmak birleşimleri kullanmaktan daha iyidir, iç içe SELECT ifadeleri yürütmeyi daha hızlı gerçekleştirir. –
Evet, düzgün çalıştığını söyleyemem, yanlış yaptığım bir yerde hissediyor. – NAJEEB