2014-01-10 28 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'b'識別爲'?'

您的幫助將得到高度讚賞

UPD:exec FindSupplier N'ב'工作

UPD2:在Visual Studio中需要使用下列字符串運行SP

="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以表明它是一個Unicode字符串。下面的示例顯示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 
相關問題