Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何检查sql存储过程中的条件_Sql Server - Fatal编程技术网

Sql server 如何检查sql存储过程中的条件

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

我想在存储过程中检查我的RawMaterialStock表列RawMaterialId是否等于我的过程参数@RawMaterialId

我正在这样做

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语句,它很有效。没问题,伙计。如果答案对您有帮助,请将其标记为已接受:)