2016-04-01 2 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

Пожалуйста, попробуйте создать * минимальный * пример того, что вы пытаетесь сделать. На данный момент я понятия не имею. Кроме того, вы почти наверняка неверно указали свои параметры, если только вы * намерение * не означает, что '@ 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

Ваш код очень трудно прочитать. Удостоверьтесь, что вы отформатируете его лучше, чтобы мы могли четко читать и знать, что не так. Кроме того, я заметил несколько предложений WHERE, которые я предлагаю вместо этого использовать HAVING. – Husein

ответ

0

Заменить эту часть WHERE

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

С

AND S.cus_name LIKE 
       CASE WHEN @CusName = '' THEN S.cus_name 
        ELSE '%' + @CusName + '%' 
       END 
Смежные вопросы