Sql server SQL存储过程中的开关大小写
在交换机案例中获取错误Sql server SQL存储过程中的开关大小写,sql-server,Sql Server,在交换机案例中获取错误 SELECT CASE @PurchaseId WHEN 1 THEN INSERT into tblPurchaseInMstr(DocNo,DocType,DocDate,PurchaseDate,SalesNodeId,SalesNodeType,FYID,LoginIDIns, TimestampIns,StatusId,InvTotPurchValue,InvTotPurchWDisc,InvNetAmt,DocSourceNodeId,DocSou
SELECT CASE @PurchaseId
WHEN 1 THEN 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)
WHEN @PurchaseId 2 THEN 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
WHEN 3 THEN DELETE tblPurchaseInMstr
END AS Purchaseid from tblPurchaseInMstr
END
GO
sql server中的CASE是一个函数。它返回基于其他数据的数据。它不接受语句,也不控制程序流
sql server中没有交换机。您只能在以下情况下使用:
依此类推。不能在CASE表达式中执行查询。一个case表达式是。。。好只是一个应该产生值的表达式 如果要基于变量/参数值执行语句,请使用If块 我假设您不想在值为3的情况下删除整个表 编辑: 我刚刚在您的原始帖子中添加了一条评论,其中有一个问题是@PurchaseId同时充当执行逻辑变量和记录ID/key变量 我更新了第一个IF块,将插入的ID值提取到@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;
我的水晶球目前正在使用中。请提供错误信息。另外,请描述你正在尝试做什么。请参阅和。开关箱未安装IMPLEMENTING@lipiPassi不要对我大喊大叫!!!请在您的问题中包含错误消息。我刚才回答了您的问题。在回答中,我提供了您的脚本的更新版本,其中包含一些小的错误修复。在看了第二眼之后,我看到了一些我以前没有注意到的令人担忧的事情。您的变量@PurchaseID似乎用于表主键的ID字段?以及用于控制值为1、2或3的执行逻辑。我想执行逻辑变量应该是最后一个脚本中的另一个变量?@honeybacker它不是这样的
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;