以文本方式查看主题

-  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=175154)

--  作者:happyft
--  发布时间:2022/2/22 14:02:00
--  如果将动态sql中的聚合的值赋值给变量
DECLARE @cname NVARCHAR(8);
DECLARE @tbName NVARCHAR(16);
DECLARE @maxbh NVARCHAR(16);  --最大编号
DECLARE @sql NVARCHAR(MAX);
SET @tbName = \'采购单\'
SET @cname = \'采购单号\'
              
SET @sql = \'  SELECT MAX(\' + @cname + \')
                            FROM \'+@tbName
EXEC sp_executesql @sql

通过上面的语句可以查询得到最大的采购单号,但如何将这个号码赋值给一个变量保存起来后面的sql语句用呢?
用下面的语句执行查询是null,不正确
SET @sql = \'  SELECT \'+@maxbh + \' = \'\'\' + MAX(\' + @cname + \') + \'\'\'  FROM \'+@tbName
EXEC sp_executesql @sql
SELECT @maxbh
谢谢!

--  作者:有点蓝
--  发布时间:2022/2/22 14:32:00
--  
SET @sql = \'  SELECT @maxbh = MAX(\' + @cname + \') FROM \'+@tbName

--  作者:HappyFt
--  发布时间:2022/2/22 14:37:00
--  
那样写不行,会出错提示  必须声明标量变量 "@maxbh"。
--  作者:有点蓝
--  发布时间:2022/2/22 15:08:00
--  
作用域的问题,参考:https://www.cnblogs.com/walden1024/p/4079777.html