2015-07-11 64 views
0

我有以下查詢,但它沒有考慮p.created_by [email protected] where子句中的如何更正它,以便根據@searchBy過濾結果。SQL where子句未得到過濾

ALTER PROC [dbo].[Rptcashcollectionouter] @branchId INT, 
              @searchBy INT, 
              @strDate DATETIME=NULL, 
              @endDate DATETIME=NULL 
AS 
    BEGIN 
     SELECT DISTINCT p.created_on AS paid_date 
     FROM reading re 
      JOIN billing_gen bg ON re.id = bg.reading_id 
      JOIN customer_registration cr ON bg.account_number = cr.account_number 
      JOIN payment p ON bg.bill_number = p.bill_number 
      JOIN customer_category cc ON cr.customer_category_id = cc.id 
     WHERE p.created_by = @searchBy 
      AND ((@strDate IS NULL) 
        OR Cast(Floor(Cast(p.created_on AS FLOAT)) AS DATETIME) >= 
         Cast(Floor(Cast(@strDate AS FLOAT)) AS DATETIME)) 
      AND ((@endDate IS NULL) 
        OR Cast(Floor(Cast(p.created_on AS FLOAT)) AS DATETIME) <= 
         Cast(Floor(Cast(@endDate AS FLOAT)) AS DATETIME)) 
      AND cr.branch_id = @branchId 
     ORDER BY p.created_on ASC; 
    END; 
+4

樣本數據和預期的結果肯定會幫助 –

回答

0

檢查您的過程中的值如下。

SELECT @branchId, @searchBy, @strDate,@endDate 

然後嘗試使用相同的值手動運行SQL。另外,請確保您的表格中的數據符合您的標準。

此外,你究竟在嘗試什麼?

Cast(Floor(Cast(p.created_on AS FLOAT)) AS DATETIME) 
0
  1. 在執行過程中,請確保您傳遞正確的值。

  2. 打印所有即將到來的值(僅用於測試)。

  3. @searchBy INT是整數類型。但我認爲「p.created_by = @ searchBy」是一種日期時間或日期類型,所以它也可能在這裏發生衝突,或顯示錯誤的結果。在下面一行。 p.created_by被視爲日期時間或日期,以@searchby爲整數。

    WHERE p.created_by = @searchBy

+0

沒有它是一個int持有誰創造了支付 –

+0

員工的ID。如果p.created_by是一個int(即持有工作人員的身份證),然後你在這裏做什麼..「演員(地板(演員(p.created_on AS FLOAT))AS DATETIME)」。解釋它或發送一些示例數據,以便我可以執行並檢查它。 –

+0

p.created_on是日期p.created_by是用戶標識 –