2017-07-14 44 views
0

我有一個過程,它從另一個表中的列中的where語句。我想添加一個特定的條件,僅用於語句的第一次執行,而不添加任何額外的行/表/列。所以我想設置聲明我可以自己更新在哪裏語句

tblBill.sdApprovedDate > dateadd(month,-3,getdate()) and 
(update tblInvoiceConfig 
set vcWhereSQL = 'tblBill.chBillStatus = ''A'' ' 
where intID = 7) 

但我得到一個錯誤說更新不是一個布爾表達式。
我有2個問題

一個)我可以以某種方式進行此更新的布爾表達式

b)項這樣的查詢正確執行(如在,第一時間的條件將是日期爲不小於3個月,之後每執行將只檢查chBillStatus)

編輯: 正如有人問,在使用這個值的過程的一部分

SET @nvcSQLQuery = ' 
SELECT DISTINCT top 3 
tblBill.intBillID, 
(... a lot of other stuff ..) 
FROM 
(...) 
WHERE 
' + SELECT vcWhereSQL from tblInvoiceConfig where intID = 7 + ' 
(...)' 

print @nvcSQLQuery 
INSERT INTO @result 
EXECUTE sp_executeSQL @nvcSQLQuery, 
         @nvcSQLParams, 
         @pvcArchiveType = @pvcArchiveType 
+1

這是select語句 – Amit

+1

我從來沒有見過任何人想要做的事像那樣,而且,我認爲這個錯誤真的在告訴你,你不能這麼做。 WHERE子句只需要布爾表達式,因爲它正在評估要返回的數據。你究竟想在這裏做什麼? – Leonidas199x

+0

此句法不起作用 – Amit

回答

0

你不需要更新表,添加你的條件來查詢是這樣的:

SET @nvcSQLQuery = ' 
    SELECT DISTINCT top 3 t.intBillID 
    FROM (
     SELECT 
     tblBill.intBillID, 
     (... a lot of other stuff ..) 
     FROM 
     (...) 
     WHERE 
     tblBill.sdApprovedDate > dateadd(month,-3,getdate()) and 
     tblBill.chBillStatus = ''A'' AND 

     ' + SELECT vcWhereSQL from tblInvoiceConfig where intID = 7 + ' 
     (...) 

     UNION ALL 

     SELECT 
     tblBill.intBillID, 
     (... a lot of other stuff ..) 
     FROM 
     (...) 
     WHERE 
     tblBill.sdApprovedDate <= dateadd(month,-3,getdate()) and 
     ' + SELECT vcWhereSQL from tblInvoiceConfig where intID = 7 + ' 
     (...) 
    )t 
' 

    print @nvcSQLQuery 
    INSERT INTO @result 
    EXECUTE sp_executeSQL @nvcSQLQuery, 
          @nvcSQLParams, 
          @pvcArchiveType = @pvcArchiveType 

或像這樣:

SET @nvcSQLQuery = ' 
    SELECT 
    tblBill.intBillID, 
    (... a lot of other stuff ..) 
    FROM 
    (...) 
    WHERE 
    ((tblBill.sdApprovedDate > dateadd(month,-3,getdate()) and 
    tblBill.chBillStatus = ''A'') 
    OR tblBill.sdApprovedDate <= dateadd(month,-3,getdate())) 

    AND 

    ' + SELECT vcWhereSQL from tblInvoiceConfig where intID = 7 + ' 
    (...) 
' 

    print @nvcSQLQuery 
    INSERT INTO @result 
    EXECUTE sp_executeSQL @nvcSQLQuery, 
          @nvcSQLParams, 
          @pvcArchiveType = @pvcArchiveType 
相關問題