exec   hdpt_InsertUpdateDelete 'Update ','HDPT_WebManage ','Email=''aa'',Pwd=''bb''', 'where id=18 '  

解决方案 »

  1.   

    email=aa,pwd=bb
    exec时,相当于执行
     ...where email=aa,pwd=bb
    会把 aa,bb当列名来处理, 所以会报错.
    解决办法,沟沟已经写了,我就不重复了.
      

  2.   


    --列名在串中不需要用单引号,但字符串值在串内应该用单引号引起来,且串内两个单引号表示一个单引号exec hdpt_InsertUpdateDelete 'Update', 'HDPT_WebManage', 'Email=''aa'',Pwd=''bb''','where id=18' 
      

  3.   

    呵呵,Email=aa,Pwd=bb 这算什么呢?字符串要用引号引起来的,在引号里的引号要用俩。
    所以就是上面说的'Email=''aa'',Pwd=''bb'''
      

  4.   

    SQL中有一些特殊情况
    比如有些列类型为varchar型,而此列的值为数值时(只有数值的字符),可以省略掉'号
    所以就会出现你碰到的那种情况正常情况下使用应该是上面大家所说的,你的语句只是特殊情况下的产物
      

  5.   

    不讨论如何赋值@ActionString了,上面讨论已够多。建议将存储过程拆分,写健壮一点。按以下参数执行,你哭都来不及:exec hdpt_InsertUpdateDelete 'Update','HDPT_WebManage','Email=11,Pwd=22','where id=18 or 1=1'
    exec hdpt_InsertUpdateDelete 'Delete','HDPT_WebManage','Email=11,Pwd=22','where id=18 or 1=1'
    --> = Crying
    exec hdpt_InsertUpdateDelete 'Crying','HDPT_WebManage','Email=11,Pwd=22','where id=18 or 1=1'-- 这样你不用Crying,静静地自己炒自己吧:
    exec hdpt_InsertUpdateDelete 'Crying','HDPT_WebManage','Email=11,Pwd=22','where id=18 or 1=1 dump tran ...'
    --@WhereString有500长度,足够写很多东西了