首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止sql中值等于0的数据值传输?

如何防止sql中值等于0的数据值传输?
EN

Stack Overflow用户
提问于 2022-09-22 12:22:29
回答 1查看 93关注 0票数 0

我有个股票计划。我只想在地点之间转乘。例如,来自A loc。到B位置5台计算机发送,但在A地没有计算机。我想在页面上显示一条消息:“没有可以传输的设备。现在,当我在SQL上A位置传输它时:-5台计算机,B位置显示5台计算机。我无法阻止它。”

我正在尝试这样的方法:

代码语言:javascript
复制
Create Proc Deneme4
(@StockID    NVARCHAR(100)=NULL,    
     @FROM       NVARCHAR(60)=NULL,
     @TO       NVARCHAR(60)=NULL,
     @CNT           integer= NULL)
AS
BEGIN
DECLARE @HasExist integer
Select @HasExist = COUNT(1) from STOK_TABLO Where URUNID=@StockID and LOKASYONID=@FROM
IF( @CNT != 0 and @FROM != '' )
BEGIN

UPDATE STOK_TABLO SET ADET=ADET-@CNT WHERE URUNID=@StockID AND LOKASYONID=@FROM
UPDATE STOK_TABLO SET ADET=ADET+@CNT WHERE URUNID=@StockID AND LOKASYONID=@TO
END
ELSE

print 'COUNT is 0 there is no possibility to transfer!'

END
代码语言:javascript
复制
STOCKID      MODELID    LOCATIONID  COUNT
DS6878HD    DS6878HD    CCR           0
DS6878HD    DS6878HD    CPM           45

那也是我的数据库。如果计数等于0,我想阻止它。而且我也不想看到一个小于0的计数。

我正在使用SQL server 2012。

EN

回答 1

Stack Overflow用户

发布于 2022-09-22 12:39:00

您似乎想先总结一下ADET的现有值。从逻辑上讲,您还需要检查新值是否低于0

也是

  • 不提供PRINT消息,这些消息主要用于调试。相反,使用THROW
  • You可能需要围绕整个事情进行事务处理。因此,为了避免死锁,您需要SELECT
  • You上的UPDLOCK锁定提示也希望SET XACT_ABORT ON确保事务被清除。

  • 在参数

中允许空似乎毫无意义。

代码语言:javascript
复制
CREATE OR ALTER PROC Deneme4
  @StockID    NVARCHAR(100),    
  @FROM       NVARCHAR(60),
  @TO         NVARCHAR(60),
  @CNT        integer
AS

SET NOCOUNT, XACT_ABORT ON;

BEGIN TRAN;

IF( ISNULL(
    (
    SELECT SUM(ADET)
    FROM STOK_TABLO WITH (UPDLOCK)
    WHERE URUNID = @StockID
      AND LOKASYONID = @FROM
    ), 0) - @CNT < 0
)
BEGIN
    THROW 50001, N'COUNT is too low, not possible to transfer!', 0;
END;

UPDATE STOK_TABLO
SET ADET += CASE WHEN LOKASYONID = @FROM THEN @CNT ELSE -@CNT END
WHERE URUNID = @StockID
  AND LOKASYONID IN (@FROM, @TO);

IF @@ROWCOUNT <> 2
    THROW 50002, N'Less than 2 rows affected!', 0;

COMMIT;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73814557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档