Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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,在交换机案例中获取错误 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;