首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用希伯来语传递SQL存储过程NVARCHAR参数?

如何用希伯来语传递SQL存储过程NVARCHAR参数?
EN

Stack Overflow用户
提问于 2014-01-10 19:07:30
回答 1查看 8K关注 0票数 3

我正在尝试向我的存储过程传递一个NVARCHAR参数。存储过程应该查找所有符合指定标准的供应商。我唯一的问题是,我试图通过包含希伯来语的标准。

代码语言:javascript
复制
ALTER PROCEDURE [dbo].[FindSupplier] 
    -- Add the parameters for the stored procedure here
    @search_criteria nvarchar(100) = ''
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    DECLARE @hebrew as bit = 0

    IF @search_criteria LIKE '%[אבגדהוזחטיחכךילמנפףערקשת]%'
    BEGIN
        SET @hebrew = 1
    END

    IF @hebrew = 0 
    BEGIN

        SELECT comn020.t_suno 'Supplier Code'
        , hebcom020.t_nama 'Supplier Name1'
            , hebcom020.t_namb 'Supplier Name2'

        FROM com020 WITH (NOLOCK)

        INNER JOIN hebcom020 WITH (NOLOCK)
            ON hebcom020.t_suno = com020.t_suno

        WHERE (LTRIM(RTRIM(com020.t_suno)) LIKE N'%' + @search_criteria + '%')
           OR (SOUNDEX(LTRIM(RTRIM(com020.t_suno))) LIKE N'%' + SOUNDEX(@search_criteria) + '%')
           OR (LTRIM(RTRIM(hebcom020.t_nama)) LIKE N'%' + @search_criteria + '%')
           OR (SOUNDEX(LTRIM(RTRIM(hebcom020.t_nama))) LIKE N'%' + SOUNDEX(@search_criteria) + '%')
           OR (LTRIM(RTRIM(hebcom020.t_namb)) LIKE N'%' + @search_criteria + '%')
           OR (SOUNDEX(LTRIM(RTRIM(hebcom020.t_namb))) LIKE N'%' + SOUNDEX(@search_criteria) + '%')

    END

    ELSE  /* hebrew */
    BEGIN
        SELECT com020.t_suno 'Supplier Code'
             , hebcom020.t_nama 'Supplier Name1'
             , hebcom020.t_namb 'Supplier Name2'

        FROM com020 WITH (NOLOCK)

        INNER hebcom020 WITH (NOLOCK)
            ON hebcom020.t_suno = com020.t_suno

        WHERE hebcom020.t_nama Collate Hebrew_CI_AI LIKE N'%' + @search_criteria + '%' Collate Hebrew_CI_AI
            OR (LTRIM(RTRIM(hebcom020.t_namb)) LIKE N'%' + @search_criteria + '%')
    END

END

当我试图传递类似于exec FindSupplier 'ב'的内容时,SQL server将char 'ב‘识别为'?’

您的帮助将不胜感激。

exec FindSupplier N'ב'成功了

UPD2:在Visual中,需要使用以下字符串运行sp

代码语言:javascript
复制
="exec FindSupplier N'" & Parameters!search_criteria.Value & "'"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-28 14:03:03

问题很简单,在LIKE条件中使用的字符串文本没有以N作为前缀来表示它是Unicode字符串。下面的示例显示了不同之处:

代码语言:javascript
复制
DECLARE  @search_criteria NVARCHAR(100) = N'ב';

IF @search_criteria LIKE '%[אבגדהוזחטיחכךילמנפףערקשת]%'
BEGIN
    PRINT 'WithOUT "N"-prefix';
END;

IF @search_criteria LIKE N'%[אבגדהוזחטיחכךילמנפףערקשת]%'
BEGIN
    PRINT 'WITH "N"-prefix';
END;

返回:

代码语言:javascript
复制
WITH "N"-prefix

要更容易地理解行为上存在这种差异的原因,请考虑以下几点:

代码语言:javascript
复制
-- when the DB has a default collation of Latin1_General_100_CI_AS_SC (code page 1252)
SELECT  '%[אבגדהוזחטיחכךילמנפףערקשת]%'
-- %[????????????????????????]%

-- when the DB has a default collation of Hebrew_100_CI_AS_SC (code page 1255)
SELECT  '%[אבגדהוזחטיחכךילמנפףערקשת]%'
-- %[אבגדהוזחטיחכךילמנפףערקשת]%

字符串文本在当前数据库的默认排序规则使用的代码页中进行解析。如果代码页可以支持这些字符,那么不使用大写"N“前缀就可以了。但是,如果该代码页中不存在这些字符,则将它们转换为"?"s。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21052390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档