Foxtable(狐表)用户栏目专家坐堂 → sql中为什么查询与用print输出的值不一样?


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

主题:sql中为什么查询与用print输出的值不一样?

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


加好友 发短信
等级:八尾狐 帖子:1930 积分:17564 威望:0 精华:0 注册:2014/7/29 19:09:00
sql中为什么查询与用print输出的值不一样?  发帖心情 Post By:2021/7/29 11:28:00 [显示全部帖子]

--查询某表中各字段的最大长度
 DECLARE my_cursor CURSOR SCROLL
 FOR
    SELECT  name
    FROM    syscolumns
    WHERE   id = OBJECT_ID('tabDIYTable55');
 OPEN my_cursor;
 DECLARE @colname NVARCHAR(16);
 DECLARE @value INT;
 FETCH NEXT FROM my_cursor
        INTO @colname;
 WHILE @@FETCH_STATUS = 0
    BEGIN
        SELECT  @value = MAX(LEN(@colname))
        FROM    JBL.dbo.tabDIYTable55;
        PRINT @colname + '  最大长度为:  '; 
        PRINT  @value  显示不一样
        FETCH NEXT FROM my_cursor
            INTO @colname;
    END;
 CLOSE my_cursor;
 DEALLOCATE my_cursor;
 
 --SELECT  MAX(LEN(F720)) FROM    JBL.dbo.tabDIYTable55;

如上用最下面的语句查询出来F20字段的最大长度是17,但print @Value 显示的是5?

什么原因?
谢谢!

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


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

没明白,我是把某个表的每一列查询放在游标里面,然后遍历从这个表中查询每一列的最大值的长度,
SELECT  @value = MAX(LEN(@colname))
        FROM    JBL.dbo.tabDIYTable55;
上面这名的意思是在表中查询某列的最大长度放在变量@Value里,然后下面print这个@value,
这样写不对吗,那正确的应该如何写

谢谢!


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


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

因为在前台更新数据时总提示截断字符的错误,都是因为设定表的字段长度不够,
现在一个字段一个字段去查询,效率太慢了,就是想要一次性查询出某个表中的每一列的字段中的最大长度值要如何才能实现?

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


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

老师误会我的意思了,不是要查每个字段的定义的长度,而是要查表中每个字段实际的字段的最大长度
也就是  select max(len(订单编号)) from 订单 查出来的长度,如果表有20列,就是按每一列的名称查询出其保存的最大值的长度

 回到顶部