sql2000 英文版 查询含有中文问题(在线等)

gaofeng67 2008-07-31 02:49:37
因为SQL2000的版本是英文版 所有如果有中文的输入字段必须是Nxxxx类型
这个问题解决数据乱码的问题
但是在查询的时候就有问题
比如按公司的名字查询 公司名字为:上海XXXXXXXXXXXXShanghaiXXXXXXXXXXX
查询是select * from XX where 公司名 lika '%'+N'上海'+'%'
这样也没有问题 问题在于我的存储过程

CREATE PROCEDURE XXX
@公司名 nvarchar(100)
AS
select * from XX where 公司名 lika '%'+N@公司名+'%'
.....
这样就通过不了编译 也用过cast convert等转换也不见效果
请高手指教 小弟在线等答案
...全文
207 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaofeng67 2008-08-01
  • 打赏
  • 举报
回复
楼上的高手 你好象没有明白我的需求 我是在PB里面调用数据到数据窗口 调用的是一个字段的模糊查询,但是这个字段有中英文的 这个字段本身我就设置成nvarchar 在数据库中中文是正常 但是在查询语句中我like 就不行了
CREATE PROCEDURE XXX
@公司名 nvarchar(100)
AS
select * from XX where 公司名 like '%'+N@公司名+'%'
.....
因为like 的是一个变量 如果是一个固定值就没问题 如 like '%'+N'上海'+'%' 问题就关键就是这个N如何配合变量用 上面也有很多朋友个我出主意 N加在前面呀 convert cast 都试过了无效...

是否还有高手能解决这个问题 今天继续在线等
fcuandy 2008-07-31
  • 打赏
  • 举报
回复
再给个例子,说明两个问题:

(1)写义为nvarchar时,赋值时加N前辍,调用时不需要
(2)nvarchar与varchar相连,由低精类型向高转,隐式换为nvarchar,所以 % 前面也不需要加N


declare @s varchar(10),@n nvarchar(10)
select @s='a',@n=N'a'
select len(@s),datalength(@s),len(@n),datalength(@n)
/*
1 1 1 2
*/

select datalength(@s+@n) 隐式转换为nvarchar,
datalength(cast(@s+@n as nvarchar(20))) 显式转换为nvarchar,
datalength(cast(@s+@n as varchar(20))) 转换为varchar,
datalength(cast('a'+@n as nvarchar(20))) 常量与nvarchar连
/*
4 4 2 4
*/
fcuandy 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 perfectaction 的回复:]
CREATE PROCEDURE XXX
@公司名 nvarchar(100)
AS
select * from XX where 公司名 like '%'+@公司名+'%'
[/Quote]


@公司名在定义时就是nvarchar的,赋值时加N,调用时不需要。
hery2002 2008-07-31
  • 打赏
  • 举报
回复
你把你数据库服务器的区域语言设置为中文试试,
不知道是不是这个原因?
gaofeng67 2008-07-31
  • 打赏
  • 举报
回复
不,可以查询,查出来也是中文,问题是在存储过程带参的不行,由于一些原因我必须要用储存过程去查
ybkenan 2008-07-31
  • 打赏
  • 举报
回复
英文中不能用中文進行查詢,隻能存儲。而且你查詢出的中文在analyzer中也是亂碼。
gaofeng67 2008-07-31
  • 打赏
  • 举报
回复
错误不应该有 这本身就是一个很简单的SQL语言 只是中英文版的问题 在中文sql里绝对不存在这种问题的
nzperfect 2008-07-31
  • 打赏
  • 举报
回复
估计你的proc还有别的错。不仅仅是这个错。
gaofeng67 2008-07-31
  • 打赏
  • 举报
回复
cast convert 方法 和N 放在外面的办法都试过了 依然无用
中国风 2008-07-31
  • 打赏
  • 举报
回复
select * from XX where 公司名 like N'%'+@公司名+'%' --公司名 字段為nvarchar時加N
hery2002 2008-07-31
  • 打赏
  • 举报
回复

--try
select * from XX where 公司名 lika '%'+cast( @公司名 as nvarchar(200))+'%'
gaofeng67 2008-07-31
  • 打赏
  • 举报
回复
lika 是笔误 应该是like 试了大家说的方法都无法成功 还有哪位有什么好办法的
comszsoft 2008-07-31
  • 打赏
  • 举报
回复


CREATE PROCEDURE XXX
@公司名 nvarchar(100)
AS
select * from XX where 公司名 lika '%'+N@公司名+'%'
-- lika是笔误还是?
like

hyde100 2008-07-31
  • 打赏
  • 举报
回复
另:
select * from XX where 公司名 lika '%'+N@公司名+'%'
应该是like吧
hyde100 2008-07-31
  • 打赏
  • 举报
回复
N@公司名=》@公司名
水族杰纶 2008-07-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 perfectaction 的回复:]
CREATE PROCEDURE XXX
@公司名 nvarchar(100)
AS
select * from XX where 公司名 like N'%'+@公司名+'%'
[/Quote]
N放外面试之~~
sdxiong 2008-07-31
  • 打赏
  • 举报
回复
CREATE PROCEDURE XXX
@公司名 nvarchar(100)
AS
set @公司名='%'+@公司名+'%'
select * from XX where 公司名 lika @公司名
playwarcraft 2008-07-31
  • 打赏
  • 举报
回复
存儲過程里的那個N 不要試試
nzperfect 2008-07-31
  • 打赏
  • 举报
回复
CREATE PROCEDURE XXX
@公司名 nvarchar(100)
AS
select * from XX where 公司名 like N'%'+@公司名+'%'

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧