1

我正在尝试使用存储过程从 SQL Server 2008 数据库中获取阿拉伯语匹配值。但它不返回匹配的值.. 为什么?

我的桌子设计是这样的:

CREATE TABLE #test1
(
col1 nVARCHAR(100)  ,
col2 nVARCHAR(100)  ,
col3 NVARCHAR(100)
)

INSERT INTO #test1 VALUES(N'لا أتكلم العربية',N'لا أتكلم العربية',N'لا أتكلم العربية')
INSERT INTO #test1 VALUES( ' fdfdf', 'dfdfdf', '45dfdf')

SELECT * FROM #test1

它很好地显示了下面的结果......

col1    col2    col3
لا أتكلم العربية    لا أتكلم العربية    لا أتكلم العربية
 fdfdf  dfdfdf  45dfdf

在我搜索阿拉伯语单词时,给定的查询给出了确切的结果..

declare @ColVal nvarchar(100)

 set @ColVal=   N'لا أتكلم العربية'
print @ColVal
select * from #test1 where col2 like @ColVal

但是当我尝试使用存储过程检索相同的数据时,即使它们存在于表中,它也不再显示匹配的行。

我的存储过程是

create proc Sp_TestArabic1 (@colValue nvarchar(100))
as
declare @ColVal nvarchar(100)
begin
set @ColVal=  'N'+@colValue
print @ColVal
select * from #test1 where col2 like @ColVal
end

exec Sp_TestArabic1 'لا أتكلم العربية'

没有给出任何结果,我尝试调试存储过程,所有列都很好地传递了值,但它没有返回正确的结果..

请提供根据条件搜索阿拉伯语单词的确切解决方案...

谢谢..

4

2 回答 2

3

您在指定 unicode 文字的方式上有几个问题 - 在传递给 proc 的常量上执行此操作,并且不要在搜索前添加“N”,否则它将查找'Nلا أتكلم العربية'

CREATE  proc Sp_TestArabic1 (@colValue nvarchar(100))
as
  begin
    select * from #test1 where col2 like @colValue
  end

exec Sp_TestArabic1 N'لا أتكلم العربية'

出于兴趣,在 SQL 2008 intellisense 中使用阿拉伯文本上的箭头键被颠倒了 - 非常奇怪:)

于 2012-06-04T06:13:18.137 回答
1

利用

exec Sp_TestArabic N'لا أتكلم العربية'

不是

exec Sp_TestArabic 'لا أتكلم العربية' 
于 2012-06-04T06:59:17.420 回答