1
/4
情况一:sql语句中存在中文字符
解决方法:将“最终执行”的sql语句复制到命令行中并执行,如果执行失败,对照sql语句在英文状态下再“认真”敲一遍
2
/4
情况二:sql语句语法错误,如缺少标点、括号等
解决方法:百度查询并学习标准sql语句,按照“最小化范围”原则,从最简单的sql语句开始,逐渐完善到目标sql语句,如
完整sql:insert into user(name,password,birtyday) values("ss","ss",new Date())
--->insert into user(name,password) values("ss","ss")
--->insert into user(name,password,birtyday) values("ss","ss",new Date())
这里是逐个排除某一属性的插入是否有问题,对于属性可能出现的问题包括:名称是否一致,属性是否唯一或是否为空,长度是否有限制,所插入的值是否多加了双引号等。
3
/4
情况三:sql语句中混入了不合法的关键词
如:insert into user(name,password,describe) values("ss","ss","ww")
乍一看没什么问题,但执行时会出现错误,这里主要是因为describe为sql中的关键词,所以识别sql语句时就会出现异常
解决方法:换个变量名,尽量不要与内置关键词冲突
4
/4
第三种情况不常见,但遇到了却是很难想到和派出的
以sqlserver数据库为例,解决方案:
1、点击数据库表右键的【设计】;
2、把影响到的列改成允许为空;
3、点击【保存】。
原因:SQL存储过程语法可能是正确的,因为语法并没有对表结构内部字段是否非空进行验证,只有执行了才知道。可以选择编辑前200行,看一下是不是新增了列,但是列里面的值是null,然后又在设置的列里面不允许有null,这样就不允许保存了。
扩展资料:
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
有用的 Aggregate 函数:
AVG() - 返回平均值,COUNT() - 返回行数,FIRST() - 返回第一个记录的值
LAST() - 返回最后一个记录的值,MAX() - 返回最大值,MIN() - 返回最小值,SUM() - 返回总和。
SQL Scalar 函数基于输入值,返回一个单一的值。
有用的 Scalar 函数:
UCASE() - 将某个字段转换为大写,LCASE() - 将某个字段转换为小写,MID() - 从某个文本字段提取字符
LEN() - 返回某个文本字段的长度,ROUND() - 对某个数值字段进行指定小数位数的四舍五入,NOW() - 返回当前的系统日期和时间,FORMAT() - 格式化某个字段的显示方式。
参考资料:百度百科——sql
产生重复的原因:这几条On语句中必然存在一对多或者多对多的关联,Left Join有三个步骤:笛卡尔积,On条件过滤,添加左表没有的数据,一旦有一对多或者多对多的关联,就必然会产生重复。方法一:在你的语句基础上使用distinct。
直接使用distinct肯定是不行的,查询结果中,1、2、3、4行是一样的,5、6行是一样的。使用distinct就只有三行了。如果QUOTEDETAIL表中有ID或者其他不重复的字段,加上这个字段再distinct是可行的。
方法二:使用子查询
select o.memo1,o.iscustprovider,o.ispurchase from QUOTEDETAIL q
where q.QUOTEid in (
select distinct id from QUOTE qu
left join WORKORDER w on w.orderid=qu.orderid
left join orderMaterial oon o.orderid=w.orderid
where q.QUOTEID =: QUOTEID)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)