问题描述
sql数据库按一个字段的所有值为条件更新另一个字段的所有值update语句怎么写呀
解决方案
解决方案二:
是在同一个表里
解决方案三:
现在出现的错误是只认条件字段里的第一个值,其他的不认
解决方案四:
updateTableNameset欲修改字段=‘***’where条件
解决方案五:
没有任何具体的数据,很难理解你到底想如何更新
解决方案六:
updateasetc1=b.c1fromtaainnerjointbbona.id=b.id
解决方案七:
updateTableNameset欲修改字段=‘***’where条件我的难点就是where条件里面的值,只认第一个而不是所有的值我要做的是,按会员卡号更新所有密码
解决方案八:
updateasetname=(caseidwhen1thenaelsebend)where...
解决方案九:
引用6楼tianlong888_ok的回复:
updateTableNameset欲修改字段=‘***’where条件我的难点就是where条件里面的值,只认第一个而不是所有的值我要做的是,按会员卡号更新所有密码
你说的是批量修改?
解决方案十:
对,朋友。我现在条件只认第一个值
解决方案十一:
LZ把你写的发出来看看
解决方案十二:
publicvoidgxpwd(){stringsql="selectvipfromdbo.CustomerVIP";SqlDataReaderdatareader=passwordcsDAL.DBHelper.GetReader(sql);if(datareader.Read()){Session["vip"]=datareader["vip"];stringvip=Session["vip"].ToString();stringpwds="888888";stringhz=vip+pwds;stringjm=hz;stringPasswords=this.GetMD5(jm,"").ToUpper();stringsql4="updatedbo.CustomerVIPsetPasswords='"+Passwords+"'";intss=passwordcsDAL.DBHelper.ExecuteCommand(sql4);if(ss>0){Response.Write("<script>alert('密码初始成功!');window.location.href='Default.aspx'</script>");//Response.Write("<Script>if(window.confirm('你确定要初始密码吗?')){alert('密码初始成功!');window.location.href='Default.aspx';}else{alert('放弃初始密码!');}</script>");}else{Response.Write("<script>alert('获取失败!')</script>");}}}
解决方案十三:
这个是个方法,我要按vip卡号字段里的所有值进行批量密码修改,并转换MD5加密
解决方案十四:
代码写的有问题
解决方案十五:
你用的是if第二点:用datareader本身是只读的保护连接的,不适合在其中又操作数据库。第三点:循环更新最好用事务提交,保持一次数据库连接。
解决方案:麻烦给改一下谢谢!我是初学者谢谢帮忙,急用
解决方案:stringsql="updatedbo.CustomerVIPsetpassword='md5后的字符串'";passwordcsDAL.DBHelper.ExecuteCommand(sql);
解决方案:stringsql="updatedbo.CustomerVIPsetPasswords=vip+'md5后的字符串'";passwordcsDAL.DBHelper.ExecuteCommand(sql);
解决方案:可以用while,Read()方法可以将满足查询的记录依次读取出来,类似于指针的Next()while(datareader.Read()){..........}你下面都更新全部了,还读出来干嘛,你是想判断如果这张表有值就更新,没值就不更新是吧
解决方案:publicintUpdatePwd(stringpwds){stringsql="UPDATEeSETe.Passwords=e.md5FROM(select*,substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',cast(vipasvarchar(50))+@Pwd)),3,32)asmd5fromCustomerVIP)e";returnSqlHelper.ExecuteNonQuery(sql,System.Data.CommandType.Text,newSqlParameter("@Pwd",pwds));}
看了你的代码,pwds你代码中设置了“888888”,批量的话所有行都是以(vip字段+pwds)MD5值作为Passwords赋值。上面代码只需要传pwds值,批量更新所有的Passwords值。不知道你的vip字段是什么类型,字符串的话cast(vipasvarchar(50))可以省略。
解决方案:学习了。
解决方案:你好看到你给我写的代码非常感谢!我更新的是CustomerVIP表中的Passwords字段,以vip字段为条件,主要现在苦恼是只认vip字段内的某一个值或第一个值,更新完了,生成的MD5码都是以第一个值+888888生成的!并且我调用的MD5是这个方法。谢谢指导一下!publicstringGetMD5(stringsDataIn,stringmove){System.Security.Cryptography.MD5CryptoServiceProvidermd5=newSystem.Security.Cryptography.MD5CryptoServiceProvider();byte[]bytValue,bytHash;bytValue=System.Text.Encoding.UTF8.GetBytes(move+sDataIn);bytHash=md5.ComputeHash(bytValue);md5.Clear();stringsTemp="";for(inti=0;i<bytHash.Length;i++){sTemp+=bytHash[i].ToString("x").PadLeft(2,'0');}returnsTemp;}
其他方案:
idpasswordvip1falkwejfvip0012cawefjvip0023cawecvip003......更新为:1MD5加密(vip001+888888)vip0012MD5加密(vip002+888888)vip0023MD5加密(vip003+888888)vip003如果是这样那要什么where条件。updatedbo.CustomerVIPsetPasswords='setpassword=CONVERT(varchar,vip)+'888888'
其他方案:
updatedbo.CustomerVIPsetpassword=CONVERT(varchar,vip)+'888888'照你前面的写法是把整个表查出来取vip字段,但是你用的if(datareader.Read())这里要使用while,而且stringsql4="updatedbo.CustomerVIPsetPasswords='"+Passwords+"'wherevip="+vip;不过这样写显然多此一举,把每行vip遍历出来再去以它为条件修改。直接用上面的sql一句就搞定了
解决方案:
解决方案:1、通过ExecuteReader方法不能边读边修改的,数据库已连接状态,只读方式一条一条读取的。要在后台执行GetMD5方法的话,首先必须把CustomerVIP表数据全部读取到List<CustomerVIP>集合中,再循环遍历执行update语句。这里不是同时修改操作所以用不到事务,是2个步骤,1先读取所有数据到List集合,2循环执行update条件id=@id2、还有一个办法就是用SqlDataAdapter,把所有数据读取到DataSet,这里是一次性把数据读取到内存中的。可以在方法里循环遍历修改DataTable,修改完整张表后,adapter.Update(table)。com.CommandText="select*fromT_CustomerVIP";SqlDataAdapteradapter=newSqlDataAdapter(com);adapter.Fill(dataset);DataTabletable=dataset.Tables[0];...这里循环所有rowDataRowrow=table.Rows[i];row["Passwords"]=调用方法赋值;....newSqlCommandBuilder(adapter);adapter.Update(table);
解决方案:updatetablesetsss=""wheresss=""
解决方案:终于成功了谢谢大家帮助UPDATEeSETe.Passwords=e.md5FROM(select*,substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',cast(vipasvarchar(50))+@Pwd)),3,32)asmd5fromCustomerVIP)但是里面的"e"是什么意思,此语句的意思是什么谢谢指导一下