Вы не можете выполнять запросы в выражении CASE.Выражение case ... ну ... просто выражение, которое должно давать значение.
Если вы хотите выполнять операторы на основе значения переменной / параметра, используйте блоки IF
ИЯ предполагаю, что вы не хотите удалять всю таблицу в случае значения 3 ...;)
Редактировать:
Я только добавил комментарий с вопросомв исходном сообщении (относительно @PurchaseId
, действующего как логическая переменная выполнения и переменная идентификатора записи / ключа).
Я обновил первый IF-блок для извлечения вставленного значения идентификатора в @PurchaseId
, предполагая,tblPurchaseInMstr.PurchaseId
- это столбец идентификаторов.
И я ввел переменную / параметр @Action
, представляющий действие, которое необходимо выполнить: 1 = вставить, 2 = обновить, 3 = удалить.
IF @Action = 1 BEGIN
INSERT INTO tblPurchaseInMstr
(
DocNo,DocType,DocDate,PurchaseDate,SalesNodeId,SalesNodeType,FYID,LoginIDIns,
TimestampIns,StatusId,InvTotPurchValue,InvTotPurchWDisc,InvNetAmt,DocSourceNodeId,
DocSourceNodeType,InvTotalCGSTAmt,InvTotalSGSTAmt,InvTotalIGSTAmt
)
VALUES
(
@DocNo,@DocType,@DocDate,@PurchaseDate,@SalesNodeId,@SalesNodeType,@FYID,@LoginID,
GETDATE(),@StatusId,@InvTotPurchValue,@InvTotPurchWDisc,@InvNetAmt,@DocSourceNodeId,
@DocSourceNodeType,@InvTotalCGSTAmt,@InvTotalSGSTAmt,@InvTotalIGSTAmt
);
SET @PurchaseId = SCOPE_IDENTITY();
END;
IF @Action = 2 BEGIN
UPDATE tblPurchaseInMstr
SET
DocNo=@DocNo, DocType=@DocType,DocDate=@DocDate,PurchaseDate=@PurchaseDate,SalesNodeId=@SalesNodeId,SalesNodeType=@SalesNodeType,FYID=@FYID,LoginIDUpd=@LoginId,
TimestampUpd=GETDATE(),StatusId=@StatusId,InvTotPurchValue=@InvTotPurchValue,InvTotPurchWDisc=@InvTotPurchWDisc,InvNetAmt=@InvNetAmt,DocSourceNodeId=@DocSourceNodeId,
DocSourceNodeType=@DocSourceNodeType,InvTotalCGSTAmt=@InvTotalCGSTAmt,InvTotalSGSTAmt=@InvTotalSGSTAmt,InvTotalIGSTAmt=@InvTotalIGSTAmt
WHERE PurchaseId = @PurchaseId;
END;
IF @Action = 3 BEGIN
DELETE FROM tblPurchaseInMstr
WHERE PurchaseId = @PurchaseId;
END;
SELECT @PurchaseId AS PurchaseId;