Sql server 如何检查sql存储过程中的条件
我想在存储过程中检查我的RawMaterialStock表列RawMaterialId是否等于我的过程参数@RawMaterialId 我正在这样做Sql server 如何检查sql存储过程中的条件,sql-server,Sql Server,我想在存储过程中检查我的RawMaterialStock表列RawMaterialId是否等于我的过程参数@RawMaterialId 我正在这样做 if(dbo.[RawMaterialStock].RawMaterialId=@RawMaterialId) BEGIN Update [RawMaterialStock] set Quantity=Quantity+ @TotalQty end ELSE BEGIN INSERT INTO [d
if(dbo.[RawMaterialStock].RawMaterialId=@RawMaterialId)
BEGIN
Update [RawMaterialStock]
set
Quantity=Quantity+ @TotalQty
end
ELSE
BEGIN
INSERT INTO [dbo].[RawMaterialStock]
([RawMaterialId],Quantity)
VALUES
(@RawMaterialId,@TotalQty)
end
但它给出的错误是无法绑定多对标识符。
我如何检查这个条件,我是一个初学者程序员请简单解释 你真的不能这么做:
if(dbo.[RawMaterialStock].RawMaterialId=@RawMaterialId)
BEGIN
--Stuff
END
相反,您必须将表中的数据选择到它自己的变量中
DECLARE @Tmp int
SELECT @Tmp = dbo.[RawMaterialStock].RawMaterialId
IF (@Tmp = @RawMaterialId)
BEGIN
--Stuff
END
或者做一些聪明的事情,比如
IF EXISTS (SELECT 0 FROM dbo.[RawMaterialStock] WHERE RawMaterialId = @RawMaterialId)
BEGIN
--Stuff
END
使用合并。
大概是这样的:
MERGE INTO [dbo].[RawMaterialStock] AS Target
USING (
VALUES (@RawMaterialId, @TotalQty)
) AS Source (NewRawMaterialId, NewQuantity)
ON target.[RawMaterialId] = source.NewRawMaterialId
WHEN MATCHED THEN
UPDATE SET Quantity = Source.NewQuantity + Quantity
WHEN NOT MATCHED BY TARGET THEN
INSERT ([RawMaterialId],Quantity) VALUES (source.NewRawMaterialID, source.NewQuantity);
您需要提供准确的错误消息,并指明它来自何处。thnx用于回复。我用了merge语句,它很有效。没问题,伙计。如果答案对您有帮助,请将其标记为已接受:)