Foxtable(狐表)用户栏目专家坐堂 → sql中用字段名=@变量是什么意思?


  共有4776人关注过本帖树形打印复制链接

主题:sql中用字段名=@变量是什么意思?

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1926 积分:17385 威望:0 精华:0 注册:2014/7/29 19:09:00
sql中用字段名=@变量是什么意思?  发帖心情 Post By:2022/11/13 17:12:00 [显示全部帖子]

在先进先出的查询中有下面的sql语句:
DECLARE @物料 VARCHAR(10) ,
    @批号 VARCHAR(10) ,
    @订单 INT;
DECLARE @出库 INT ,
    @库存 INT ,
    @未分配 INT;
 
UPDATE  #t
SET     @库存 = CASE WHEN 物料 = @物料 THEN CASE WHEN 批号 = @批号 THEN @库存
                                           ELSE @库存 + 库存数
                                      END
                   ELSE 库存数
              END ,
......

上面的红色显示的没理解,最上面定义了变量@物料及@批号等,update 语句前也没有为这些变量赋值,
用 物料=@物料 是表示物料 is null吗? 没看懂,但运行结果还是正确的,

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1926 积分:17385 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2022/11/13 21:42:00 [显示全部帖子]

没懂,但如果没有这样,把它删除掉结果就不正确了
UPDATE  #t
SET     @库存 =  CASE WHEN 批号 = @批号 THEN @库存
                                  ELSE @库存 + 库存数
                                  END
              END 
print @库存

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1926 积分:17385 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2022/11/13 22:12:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:先进先出2.png
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:先进先出例子.txt


附件的代码直接复制在sql数据库中就可以运行,都是临时表中生成,不影响什么,请老师指点下,因为看不懂物料 = @物料就不能运用到其他地方,
谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1926 积分:17385 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2022/11/13 22:46:00 [显示全部帖子]

问题是前面只声明了@物料这个变量,没有赋值,那
if  物料 = @物料 then 就是false,下面就无法执行,为何不直接就用@库存 = 库存数,但我如果直接用@库存 = 库存数
最后面得到的结果就不对了,感觉这样用还有循环一样,所以没懂
主要问题就是生成临时表后我查询了下
SELECT  @库存 = CASE WHEN 物料 = @物料 THEN CASE WHEN 批号 = @批号 THEN @库存
                                           ELSE @库存 + 库存数
                                      END
                   ELSE 库存数
              END
FROM    #t;
PRINT @库存;
打印出来的@库存 = 20

UPDATE  #t
SET   @库存 = 20,
SET @库存 = CASE WHEN 物料 = @物料 THEN CASE WHEN 批号 = @批号 THEN @库存
                                           ELSE @库存 + 库存数
                                      END
                   ELSE 库存数
              END ,
        @出库 = CASE WHEN @库存 > 0
......
如果上面第一句 set后 直接用@库存 =20执行完成后得到的最终结果就是错误的,但如果用红色的就是正确的

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1926 积分:17385 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2022/11/13 23:18:00 [显示全部帖子]

我知道啊,意思是我update时直接就用SET  @库存 = 20,然后再直接写下面的@出库 = .....如下面
UPDATE  #t
SET   @库存 = 20,
        @出库 = CASE WHEN @库存 > 0
......
这样得出来的结果就不对,还有最下面为几个变量现赋值,
      @库存 = @库存 - @出库 ,
        出库 = @出库 ,
        未分配 = @未分配 ,
        库存结余 = @库存 ,
        未配订单 = @订单 ,
        @物料 = 物料 ,
        @批号 = 批号;
是不是最后面这几个变量赋值后又会重新执行前面的update set语句,因为如果update 只执行一次应该得不到最终的结果的,肯定要每行循环


 回到顶部