2016-04-01 4 views
0
ALTER PROCEDURE [dbo].[ViewSo] 
    @Dt1 as datetime, 
    @Dt2 as datetime, 
    @CusName as nvarchar, 
    @so_no as nvarchar 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT * 
    FROM 
     (SELECT 
      0 as stat, 
      m.id, f.id as fg_id, f.fg_des, m.so_no, 
      Replace(CONVERT(NVARCHAR, CAST(m.so_date AS DATE) , 106),' ','-') AS so_date, 
      Convert(NVARCHAR,CAST(m.so_date AS DATE),101) AS so_date1, 
      m.cus_name, m.so_cus_id, m.doc_no, m.sale_person, m.so_rem, 
      f.fg_des AS eXP1, f.fg_qty, 
      CONVERT(VARCHAR(10), CAST(f.req_date AS DATE), 101) AS req_date, 
      CASE 
       WHEN COALESCE (q.tot_req_qty, 0) < f.fg_qty 
        THEN 'Not Updated' 
        ELSE 'Updated' 
      END AS req_qty_stat, 
      'SO No :' + CONVERT(varchar(15), m.so_no) + '/SO Date :' + CONVERT(varchar(15), REPLACE(CONVERT(NVARCHAR, CAST(m.so_date AS DATE), 106), ' ', '-')) + '/Cus Name :' + CONVERT(varchar(15), m.cus_name) + '/Sales Prsn :' + CONVERT(varchar(15), m.sale_person) AS filter , 
      f.fg_no,m.so_stat, 
      m.del_flag, m.st_stat, m.st_rem  
     FROM 
      so_mas AS m 
     INNER JOIN 
      so_fg AS f ON m.id = f.so_id 
     LEFT OUTER JOIN  
      (SELECT   
        fg_id, SUM(req_qty) AS tot_req_qty  
       FROM 
        fg_qty 
       WHERE   
        (del_flag = 0)  
       GROUP BY fg_id) AS q ON q.fg_id = f.id 
     WHERE 
      m.del_flag = 0) AS S 
    WHERE 
     CONVERT(datetime, s.so_date) BETWEEN @Dt1 AND @Dt2 
     AND S.cus_name LIKE 
        CASE WHEN @CusName = '' THEN S.cus_name 
         ELSE +'%' + @CusName + '%' 
        END 
    ORDER BY 
     s.so_date; 
END 

これは私の場合のようなステートメントを渡す私のストアドプロシージャです。クエリとして実行する場合、正常に動作します。ストアドプロダクションが間違った結果につながるため、私が使用した場合。ストアドプロシージャーのような文を渡す場合

解決にお役立てください。

+0

WHERE

AND S.cus_name LIKE CASE WHEN @CusName = '' THEN S.cus_name ELSE +'%' + @CusName + '%' END 

のこの部分を交換し、あなたが何をしようとしての*最小限*例を作成してみてください。私は現時点では分かりません。また、* CustNo'と '@so_no'は1文字までしか含めるべきでない限り、あなたはあなたのパラメータを誤って宣言しています。 [癖のある習慣:VARCHAR宣言(長さなし)]を参照してください(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without- length.aspx) –

+0

あなたのコードは読みにくいです。何が間違っているのかを明確に読んで理解できるように、フォーマットをよくするようにしてください。また、私はあなたが代わりにHAVINGを使用することを提案する複数のWHEREステートメントに気づいた。 – Husein

答えて

0

AND S.cus_name LIKE 
       CASE WHEN @CusName = '' THEN S.cus_name 
        ELSE '%' + @CusName + '%' 
       END 
関連する問題