none
sql 存储过程 WHERE 语句中.查中文记录,查不出来 RRS feed

  • 常规讨论

  • 晕了..自己解决了...原来存储过程没有加NVARCHAR长度

       ALTER proc [dbo].[usp_角色的菜单_LoadByID]
    (
     @菜单ID uniqueidentifier,@角色名 nvarchar(50)
    )
    as

    select  [菜单ID],[角色名]
    from 角色的菜单
    where 菜单ID =@菜单ID  and 角色名 =  @角色名

    1.我的存储过程 如下:

          ALTER proc [dbo].[usp_角色的菜单_LoadByID]
    (
     @菜单ID uniqueidentifier,@角色名 nvarchar
    )
    as

    select  [菜单ID],[角色名]
    from 角色的菜单
    where 菜单ID =@菜单ID  and 角色名 =  @角色名

    ----------------------------------------------------------

    2.查询分析器中执行

    exec usp_角色的菜单_LoadByID
    @菜单ID='0dd0d516-f5b2-403d-800c-55c9485aa325',@角色名='管理员'

    查出来无结果

    -----------------------------------

    但是用下面的语句在查询分析器中

    select  [菜单ID],[角色名]
    from 角色的菜单
    where 菜单ID ='0dd0d516-f5b2-403d-800c-55c9485aa325'  and 角色名 = '管理员'

    结果有记录的

    -----------------------------------------------

    3.如果.角色名字段中的记录 只有一个中文或者一个英文字符.则存储过程可以执行!记录为一个以上的字符就存储过程就无法通过

    例如:存在一个角色名字段为 "管" 这个记录

    则存储过程

    exec usp_角色的菜单_LoadByID
    @菜单ID='0dd0d516-f5b2-403d-800c-55c9485aa325',@角色名='管'

    可以执行通过!

    --------------------------------------------------

    不知是为什么?希望有人指点一下?我的QQ:76442592     MAILL:YIZONGXING@21CN.COM

    2010年9月12日 3:00

全部回复

  • 你好

    或者你可以嘗試在 NVARCHAR 的 VARIABLE 上加 "N"

    E.G.

    exec usp_角色的菜单_LoadByID
    @菜单ID='0dd0d516-f5b2-403d-800c-55c9485aa325',@角色名=N'管'

    Please correct me if my concept is wrong


    Chi
    2010年9月12日 8:20