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


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

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

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


加好友 发短信
等级:超级版主 帖子:107178 积分:545139 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/29 11:52:00 [显示全部帖子]


[此贴子已经被作者于2021/7/29 20:12:26编辑过]

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


加好友 发短信
等级:超级版主 帖子:107178 积分:545139 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/29 20:16:00 [显示全部帖子]

2楼说错了,我们换种方式来理解,到数据库执行下面代码,会发现值是不一样的。

DECLARE @colname NVARCHAR(16);
set @colname = '第六列';
select max(len(@colname)) from [dbo].[表A]
select max(len(第六列)) from [dbo].[表A]

因为第一个select其实计算的是@colname这个变量的值表示的长度,值是“第六列”,长度永远是3,计算的是第六列”这个字符串的长度,而不是指第六列这个列里所有单元格的值的最大长度

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


加好友 发短信
等级:超级版主 帖子:107178 积分:545139 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/29 22:21:00 [显示全部帖子]

查列的定义长度也不是这样查的


select
obj. name,
col. name  as  ColumnName,
col.max_length  as  DataLength,
col.is_nullable  as  IsNullable
from  sys.objects obj
inner  join  sys.columns col
on  obj.object_id=col.object_id
where  obj.name ='表A'

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


加好友 发短信
等级:超级版主 帖子:107178 积分:545139 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/30 8:37:00 [显示全部帖子]

如果是这个问题【因为在前台更新数据时总提示截断字符的错误,都是因为设定表的字段长度不够,】

就应该是6楼的方式,查列的定义长度才有用啊。也就是下面的字符长度
图片点击可在新窗口打开查看

 回到顶部