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


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

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

帅哥,在线噢!
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17140 威望: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吗? 没看懂,但运行结果还是正确的,

谢谢!

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107744 积分:548059 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/13 20:16:00 [只看该作者]

就是物料这个单元格的值 = @物料这个变量的值。至于@物料有没有赋值和这个=判断没有一点关系。

不用问为什么要这样用,有些神仙代码估计当事人都不一定知道什么一回事了。

 回到顶部
帅哥,在线噢!
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17140 威望: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 @库存

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107744 积分:548059 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/13 21:46:00 [只看该作者]

意思就是这些代码到底什么意思只有写这个代码的人才知道了,甚至估计写这个代码的人都不一定知道什么一回事了。

看不懂就不要乱改。

 回到顶部
帅哥,在线噢!
HappyFt
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17140 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2022/11/13 22:12:00 [只看该作者]


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

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


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

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107744 积分:548059 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/13 22:39:00 [只看该作者]

这是一个嵌套的用法,用vb来解释就是

if  物料 = @物料 then
    if 批号 = @批号 then
        @库存=@库存
    else
        @库存=@库存 + 库存数
    end if
else
    @库存=库存数
endif

 回到顶部
帅哥,在线噢!
HappyFt
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17140 威望: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执行完成后得到的最终结果就是错误的,但如果用红色的就是正确的

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107744 积分:548059 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/13 23:09:00 [只看该作者]

false就赋值库存数啊,不会连vb的代码都看不懂了吧

SET @库存 = CASE WHEN 物料 = @物料 THEN CASE WHEN 批号 = @批号 THEN @库存
                                           ELSE @库存 + 库存数
                                      END
                   ELSE 库存数
              END ,

if  物料 = @物料 then
    if 批号 = @批号 then
        @库存=@库存
    else
        @库存=@库存 + 库存数
    end if
else
    @库存=库存数
endif

 回到顶部
帅哥,在线噢!
HappyFt
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17140 威望: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 只执行一次应该得不到最终的结果的,肯定要每行循环


 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107744 积分:548059 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/11/14 8:34:00 [只看该作者]

使用ssms调试吧,逐句执行看看各个变量的值的变化


 回到顶部