表结构:
  有两个表:A(ysdzt,zt)  B(ysdzt),其中ysdzt是varchar(60)  zt是int,且A中数据明显多于B中
需求:
  现我要更改A中zt字段,条件是ysdzt是B中的。
我用的语句是:
  update A set zt=8 where ysdbh in(select ysdbh from B with(nolock))
出现的问题大概是这样的
  无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CS_AI" 之间的排序规则冲突。好像int型数据才可以那样,小弟不知道varchar以及nvarchar要怎么比较 in ,not in ,=  望大牛们帮忙。

解决方案 »

  1.   

    还有就是怎么判断连个字符型数据相等,比如ysdbh1为'1,2,3,4,5'ysdbh2为'1,3,2,4,5'ysdbh3为'1,2,3,4,5'怎么样才能判断ysdbh1与ysdbh3相等,但ysdbh1和ysdbh2,ysdbh2和ysdbh3不相等呢?
      

  2.   

    update A set zt=8 where ysdbh in(select ysdbh from B with(nolock) COLLATE  Chinese_PRC_CI_AS)
     排序规则的问题
      

  3.   


    -->try
    update A set zt=8 where ysdbh COLLATE Chinese_PRC_CI_AS in(select ysdbh from B with(nolock))
    --or
    update A set zt=8 where ysdbh COLLATE Chinese_PRC_CI_AI in(select ysdbh from B with(nolock))
      

  4.   


    update A
    set zt = 8
    from b
    where ysdzt = B.ysdzt
      

  5.   

    如果直接执行的话,提示“ysdbh不明确”。
    如果修改为以下的话,
    update A
    set zt = 8
    from A,B
    where A.ysdzt = B.ysdzt
    则又出现老问题“无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CS_AI" 之间的排序规则冲突”了。
      

  6.   

    那试试这个:
    update A
    set zt = 8
    from b
    where ysdzt COLLATE   Chinese_PRC_CI_AS= B.ysdzt COLLATE   Chinese_PRC_CI_AS