2014-01-10 3 views
2

я "м пытается передать NVARCHAR параметр в моей процедуре магазина. Хранимая процедура предполагают, чтобы найти всех поставщиков, что отвечает указанным критериям. Единственная проблема у меня есть, что я пытаюсь передать критерии, которые содержат строку на иврите.Как передать параметр хранимой процедуры SQL 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-сервер распознает char 'ב' как '?'

Ваша помощь будет высоко оценен

UPD: exec FindSupplier N'ב' работал

UPD2: В Visual Studio необходимо запустить зр со следующей строкой

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

Вот связанный с этим вопрос ... http://stackoverflow.com/questions/3438483/hebrew-encoding-in-sql-server2005 – Jason

+0

Джейсон, это не тот же случай ... Мне нужно обрабатывать параметр sp, а не объявленную переменную – IgorM

+1

Это не работает? exec FindSupplier N 'ב' – Jason

ответ

1

Проблема заключается в том, просто, что строковый литерал б в состоянии LIKE есть не с префиксом N, чтобы указать, что это строка в Юникоде. S разница:

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; 

Возвращает:

WITH "N"-prefix