none
【SQL】如何为bit类型的参数取反呢?帮下忙 挺着急 谢谢 RRS feed

  • 问题

  • 使用的数据库为SQL2K 完整存储过程如下:

    CREATE proc proc_SetStatus

    @status bit,@id int,@field nvarchar(50) -- 其中@field是动态字段名  @status是bit类型的 其值是从后台传递过来 1或0

    as


    Exec('update tb_product set '+@field+'= '''+~@status+''' where id='''+@id+'''')

    --update tb_product set @field=@status^1 where id=@id



    GO

    现在出现的问题是~附近有语法错误 所以前来询问高手到底错在哪里,表示感谢


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com
    2011年1月25日 14:40

答案

  • SQL2000 好像会把bit自动转换为int处理。

    可以了 睡了一觉来了灵感 呵呵 如下:

    CREATE proc proc_SetStatus

    @status bit,@id int,@field nvarchar(50)
    as

    set @status=~@status
    Exec('update tb_product set '+@field+'= '''+@status+''' where id='''+@id+'''')
    GO

    也就是说我把@status的取反放在了执行函数外面执行

     

    这位朋友说“SQL2000 好像会把bit自动转换为int处理。” 其实不是这样的 cs后台传递的参数是字符串类型的 在存储过程中定义的bit类型 也就是说自动就转换到了bit类型的 根据存储过程中定义的参数类型来识别


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com
    • 已标记为答案 jinwb1982 2011年1月26日 5:28
    2011年1月26日 5:28

全部回复

  • 试试和1异或取反.

    Exec('update tb_product set '+@field+'= '''+ @status^1 +''' where id='''+@id+'''')


    This posting is provided "AS IS" with no warranties, and confers no rights.
    2011年1月25日 15:34
  • 试试和1异或取反.

    Exec('update tb_product set '+@field+'= '''+ @status^1 +''' where id='''+@id+'''')


    This posting is provided "AS IS" with no warranties, and confers no rights.

    是的这个我也试了 不行 提示^附近有语法错误  我在想是不是参数不能取反 需要字段取反呢?比如我上面的@status是参数 是不是用字段名取反呢。而我这里的字段也是动态变化的 类型都为bit类型

     

    还有一个地方也引起了我的怀疑 从后台我传递的变量值为0或1  是不是得把转变成 true或false才能取反操作呢?纠结中........继续求解!


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com
    2011年1月25日 15:46
  • SQL2000 好像会把bit自动转换为int处理。

    2011年1月26日 4:04
  • SQL2000 好像会把bit自动转换为int处理。

    可以了 睡了一觉来了灵感 呵呵 如下:

    CREATE proc proc_SetStatus

    @status bit,@id int,@field nvarchar(50)
    as

    set @status=~@status
    Exec('update tb_product set '+@field+'= '''+@status+''' where id='''+@id+'''')
    GO

    也就是说我把@status的取反放在了执行函数外面执行

     

    这位朋友说“SQL2000 好像会把bit自动转换为int处理。” 其实不是这样的 cs后台传递的参数是字符串类型的 在存储过程中定义的bit类型 也就是说自动就转换到了bit类型的 根据存储过程中定义的参数类型来识别


    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com
    • 已标记为答案 jinwb1982 2011年1月26日 5:28
    2011年1月26日 5:28
  • Bit只有一个字节bit,还取什么反呢
    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2011年1月26日 7:50
  • Bit只有一个字节bit,还取什么反呢
    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com

    bit有两种值啊 0或1  当然需要取反了

    煜诚海参专卖 淘宝店铺:http://jinweb.taobao.com
    • 已标记为答案 jinwb1982 2011年1月26日 8:50
    • 取消答案标记 jinwb1982 2011年1月26日 8:50
    2011年1月26日 8:30