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

Sql server 如何用希伯来语传递SQL存储过程NVARCHAR参数?,sql-server,tsql,stored-procedures,unicode,hebrew,Sql Server,Tsql,Stored Procedures,Unicode,Hebrew,我正在尝试将NVARCHAR参数传递给我的存储过程。存储过程应该查找符合指定标准的所有供应商。我唯一的问题是,我试图通过包含希伯来语的标准 ALTER PROCEDURE [dbo].[FindSupplier] -- Add the parameters for the stored procedure here @search_criteria nvarchar(100) = '' AS BEGIN -- SET NOCOUNT ON added to preven

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

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'ב'识别为'?'

非常感谢你的帮助

UPD:
exec FindSupplier N'ב'

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

="exec FindSupplier N'" & Parameters!search_criteria.Value & "'"

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

DECLARE@search_-criterianvarchar(100)=N';
如果@search_条件,如“%[1488;בככככככככפף׬ש]%
开始
打印“不带“N”-前缀”;
结束;
如果@search_条件,如N''[1488;בכככזככככפףעשת]%
开始
用“N”-前缀打印“;
结束;
返回:

带有“N”前缀的

为了更容易理解为什么会有这种行为差异,请考虑以下内容:

-- 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.

这里有一个相关的问题。。。杰森,情况不一样。。。我需要处理sp参数,而不是声明的变量这不起作用?exec FindSupplier N'ב'实际上它确实有效,谢谢!(这是我的错误)。知道了worked@IgorM如果你发布了一个问题,然后在别人回答之前就解决了,那么你应该发布答案来帮助其他可能有同样问题的人。谢谢:)