SQL语句,将一个表中的值加到另一个表中出现错误
发布网友
发布时间:2022-04-09 10:04
我来回答
共4个回答
热心网友
时间:2022-04-09 11:33
先看下cards表 和recharges表是一对一,还是一对多的关系,
我估计是 select moneyBalance from recharges where recharges .cardID=cards.CardID 这句,没有在recharges 中找到相同cards.CardID的值。
即,cards表中有一行记录的CardID=1,但recharges 表中不存在CardID=1的记录。
这就是报”不能将值 NULL 插入列 'balance',表 'Cards';列不允许有空值。UPDATE 失败。“错误的原因。
解决办法:
1、采用1楼的方法,可以将两表中CardID相同的行记录进行更新。
2、Select * From cards Where CardID not in(select CardID from recharges)使用该语句查出那些不能匹配的行记录,当然 not in 效率低了点,需要的话可以再优化。
热心网友
时间:2022-04-09 12:51
百度知道就是被楼上的这种垃圾给搞坏的。。。找点书COPY过来有什么意思。。。。。。。
-----------------------------
要防止SQL注入其实不难,你知道原理就可以了。
所有的SQL注入都是从用户的输入开始的。如果你对所有用户输入进行了判定和过滤,就可以防止SQL注入了。用户输入有好几种,我就说说常见的吧。
文本框、地址栏里***.asp?中?号后面的id=1之类的、单选框等等。一般SQL注入都用地址栏里的。。。。如果要说怎么注入我想我就和上面的这位“仁兄”一样的了。
你只要知道解决对吗?
对于所有从上一页传递过来的参数,包括request.form 、request.qurrystring等等进行过滤和修改。如最常的***.asp?id=123 ,我们的ID只是用来对应从select 里的ID,而这ID一般对应的是一个数据项的唯一值,而且是数字型的。这样,我们只需把ID的值进行判定,就可以了。vbs默认的isnumeric是不行的,自己写一个is_numeric更好,对传过来的参数进行判定,OK,搞定。算法上的话,自己想想,很容易了。但是真正要做到完美的话,还有很多要计算的。比如传递过来的参数的长度,类型等等,都要进行判定。还有一种网上常见的判定,就是判定传递参数的那一页(即上一页),如果是正常页面传弟过来就通过,否则反之。也有对' or 等等进行过滤的,自己衡量就可以了。注意一点就是了,不能用上一页的某一个不可见request.form("*")进行判定,因为用户完全可以用模拟的形式“复制”一个和上一页完全一样的页面来递交参数。这样,这招就没用了。。。。
OK就说这么多,还不明白的话,找我。Loadinger@hotmail.com
追问那你这种乱回答问题的算什么。。
热心网友
时间:2022-04-09 14:26
update t
set balance=isnull(t.balance,0)-isnull(a.moneyBalance ,0)
from
cards t,recharges a
where t.CardID=a.cardID
这是SQL SERVER的写法。。。。。。你是啥数据库
所以加了个ISNULL。。他说有NULL值。。。你就先判断下,如果有NULL,就给个0.。
因为数字-NULL或NULL-数字得到的就是NULL
热心网友
时间:2022-04-09 16:17
--需要空值处理,这个看你的数据库了.另sql有点bug,你这样会引起数据错误.加个where条件
update cards
set balance=balance-(select moneyBalance from recharges where recharges .cardID=cards.CardID)
exists(select moneyBalance from recharges where recharges .cardID=cards.CardID)