1 问题重现
(1)准备测试数据
新建数据表tb_Student并插入下图所示的测试数据。
图1 数据表tb_Student的数据
(2)新建查询
DECLARE @teacher_name NVARCHAR SET @teacher_name = '李四' SELECT * FROM tb_Student AS s WHERE s.teacher_name = @teacher_name
(3)执行查询
什么也没有得到,但是数据表中明明存在满足条件的数据啊,问题出在哪里?
2 问题分析与解决
通过查阅资料,了解到:不指定NVARCHAR类型的长度时,会使用默认长度,默认长度是1,所以本例中的变量@teacher_name被赋值‘李四‘时,为其分配的空间只够保存字符‘李‘,而多出来的字符‘四‘将被舍去。所以,这里的查询便变成了:查询学生表中老师姓名为‘李‘的所有学生信息。很显然,满足该条件的记录不存在。修正这个问题很简单,只需为NVARCHAR类型的@teacher_name变量指定一个长度,这里为其分配十个字节的存储空间,修正后再次执行查询,正确得到下图所示结果。
图2 查询执行结果
3 总结
本文所讨论的问题真的是太“微不足道”了,但就是这样一些“微不足道”的小问题往往使我们绞尽脑汁。
为了更好的规避这些本不应该出现的“小问题”,最好的方法就是:强化对基础知识的学习,并在工作中不断的实践与总结,仅此而已。
原文地址:http://blog.csdn.net/yl2isoft/article/details/39644233