以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- sql中用字段名=@变量是什么意思? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=183690) |
-- 作者:happyft -- 发布时间:2022/11/13 17:12:00 -- sql中用字段名=@变量是什么意思? 在先进先出的查询中有下面的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吗? 没看懂,但运行结果还是正确的, 谢谢!
|
-- 作者:有点蓝 -- 发布时间:2022/11/13 20:16:00 -- 就是物料这个单元格的值 = @物料这个变量的值。至于@物料有没有赋值和这个=判断没有一点关系。 不用问为什么要这样用,有些神仙代码估计当事人都不一定知道什么一回事了。
|
-- 作者:HappyFt -- 发布时间:2022/11/13 21:42:00 -- 没懂,但如果没有这样,把它删除掉结果就不正确了 UPDATE #t SET @库存 = CASE WHEN 批号 = @批号 THEN @库存 ELSE @库存 + 库存数 END END print @库存
|
-- 作者:有点蓝 -- 发布时间:2022/11/13 21:46:00 -- 意思就是这些代码到底什么意思只有写这个代码的人才知道了,甚至估计写这个代码的人都不一定知道什么一回事了。 看不懂就不要乱改。
|
-- 作者:HappyFt -- 发布时间:2022/11/13 22:12:00 -- 附件的代码直接复制在sql数据库中就可以运行,都是临时表中生成,不影响什么,请老师指点下,因为看不懂物料 = @物料就不能运用到其他地方, 谢谢! |
-- 作者:有点蓝 -- 发布时间:2022/11/13 22:39:00 -- 这是一个嵌套的用法,用vb来解释就是 if 物料 = @物料 then if 批号 = @批号 then @库存=@库存 else @库存=@库存 + 库存数 end if else @库存=库存数 endif
|
-- 作者:HappyFt -- 发布时间: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执行完成后得到的最终结果就是错误的,但如果用红色的就是正确的 |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间:2022/11/13 23:18:00 -- 我知道啊,意思是我update时直接就用SET @库存 = 20,然后再直接写下面的@出库 = .....如下面 UPDATE #t SET @库存 = 20, @出库 = CASE WHEN @库存 > 0 ...... 这样得出来的结果就不对,还有最下面为几个变量现赋值, @库存 = @库存 - @出库 , 出库 = @出库 , 未分配 = @未分配 , 库存结余 = @库存 , 未配订单 = @订单 , @物料 = 物料 , @批号 = 批号; 是不是最后面这几个变量赋值后又会重新执行前面的update set语句,因为如果update 只执行一次应该得不到最终的结果的,肯定要每行循环 |
-- 作者:有点蓝 -- 发布时间:2022/11/14 8:34:00 -- 使用ssms调试吧,逐句执行看看各个变量的值的变化 |