2016-11-17 21 views
0

以下に示すストアドプロシージャがあります。ペルシア語の文字 'ی'を含むパラメータを送信すると、レコードは返されません。 以前はNを使用しましたが、うまく動作しませんでした。ストアドプロシージャは、ペルシア語テキストが0のレコードを返します。

ALTER PROCEDURE [DB].[sp_Acceptor_SelectByDynamicField_ForChart] 
    @ProjectType NVARCHAR(50)=NULL, 
    @FromDate datetime=NULL, 
    @ToDate datetime=NULL 
AS 
BEGIN 
    SET NOCOUNT ON; 

     DECLARE @Where VARCHAR(MAX), 
       @SQL VARCHAR(MAX)   

    SET @Where = ' WHERE 1=1 ' 

    IF (@ProjectType IS NOT NULL) 
      SET @Where = @Where + ' AND ProjectType = N''' + @ProjectType + ''' '   

    IF (@FromDate IS NOT NULL AND @ToDate IS NOT NULL) 
      SET @Where = @Where + ' AND PmDate BETWEEN ''' + CONVERT(nvarchar(50),(@FromDate),101) + '''  AND ''' + CONVERT(nvarchar(50),@ToDate, 101) + ''' '         

    SET @SQL = 'SELECT * From Acceptor ' + @Where 

    EXEC (@SQL) 

END 
+1

'ProjectType = N '' '+ @ProjectType + ''' '' 'ProjectType LIKE N' に変更する必要があります '%' + @ProjectType + '%'」「' – Dhwani

答えて

0

これは、あなたが尋ねている問題を解決するだろうと確信していますが、このストアドプロシージャを書く良い方法があります。つまり、ストアドプロシージャはSQLインジェクション攻撃に対して脆弱です。
代わりにこれを試してみてください:

ALTER PROCEDURE [itnarenj.ir_DB].[sp_Acceptor_SelectByDynamicField_ForChart] 
    @ProjectType NVARCHAR(50)=NULL, 
    @FromDate datetime=NULL, 
    @ToDate datetime=NULL 
AS 
BEGIN 
    SET NOCOUNT ON; 


    SELECT * 
    FROM Acceptor 
    WHERE (ProjectType = @ProjectType OR @ProjectType IS NULL) 
    AND (
      @FromDate IS NULL OR @ToDate IS NULL 
      OR 
      (
      PmDate >= @FromDate 
      AND PmDate <= @ToDate 
      )   
     ) 

END 
+0

ありがとうございます、それは問題を解決します.. soooooooo多くありがとう –

+0

喜んで助けてください:-) –

関連する問題