qzb:群组表
qzmc:群组名称
yhb:用户表
yhm:用户名
qzb中有qzmc,yhb中也有qzmc。
以下代码用Access数据库时一切正常,但换成SQL Server2000后,如果用户名是英文一切正常,但用户名是汉字时查不出结果。
select * from qzb
where qzmc=(select qzmc from yhb where yhm=:yhm)
起先我想是不是数据类型的问题,因为qzmc,yhm用的是varchar。但改为nvarchar后结果还是一样。
害的我只有分开两段写才解决问题:
select qzmc from yhb
where yhm=:yhm
..........
select * from qzb
where qzmc=:qzmc
..........
为什么会这样,请高手指教。谢谢!

解决方案 »

  1.   

    子查询若返回的只有一个值,则没有错,改成这下面这样吧select * from qzb
    where qzmc=(select top 1 qzmc from yhb where yhm=:yhm)

    select * from qzb
    where qzmc in (select qzmc from yhb where yhm=:yhm)
      

  2.   

    不用参数,直接拼凑sql,结果对不对?
      

  3.   

    我觉得也是字符集的问题,但是我将varchar改为nvarchar也不行(用户名是汉字时)。但用户名是英文时不管使用那种类型都可以正常出结果。nvarchar是unicode字符集吧?
    那到底是什么地方出问题了呢?操作系统的字符集应该是unicode的吧。
      

  4.   

    没有提示,软件可以正常运行,只是权限设置不起作用。也就是yhb或qzb有一个没打开。
      

  5.   


    不要在字段类型上纠结。我使用nvarchar或varchar或二者兼顾都没有问题。
    看看你的服务器默认语言使用的是不是中文简体。
    另外可以更改一下数据库的字符集:
    alter database test01 collate Chinese_PRC_CI_AI在显示的时候可以更改一下显示的顺序试试。