因未指定NVARCHAR类型的长度而导致的问题

问题重现

1)准备测试数据

新建数据表tb_Student并插入下图所示的测试数据。

 

数据表tb_Student的数据

(2)新建查询

DECLARE @teacher_name NVARCHAR
SET @teacher_name = '李四'
SELECT * FROM tb_Student AS s WHERE s.teacher_name = @teacher_name

(3)执行查询

什么也没有得到,但是数据表中明明存在满足条件的数据啊,问题出在哪里?

 

问题分析与解决

通过查阅资料,了解到:不指定NVARCHAR类型的长度时,会使用默认长度,默认长度是1,所以本例中的变量@teacher_name被赋值'李四'时,为其分配的空间只够保存字符'',而多出来的字符''将被舍去。所以,这里的查询便变成了:查询学生表中老师姓名为''的所有学生信息。很显然,满足该条件的记录不存在。修正这个问题很简单,只需为NVARCHAR类型的@teacher_name变量指定一个长度,这里为其分配十个字节的存储空间,修正后再次执行查询,正确得到下图所示结果。

 

图2 查询执行结果

 

总结

本文所讨论的问题真的是太“微不足道”了,但就是这样一些“微不足道”的小问题往往使我们绞尽脑汁。

为了更好的规避这些本不应该出现的“小问题”,最好的方法就是:强化对基础知识的学习,并在工作中不断的实践与总结,仅此而已。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值