2015-10-13 33 views
1
UPDATE LoanAccount 
SET LoanAmount = (
     SELECT ((la.LoanAmount * (DATEDIFF(DAY, la.LoanDate, GETDATE()) * (la.InterestRate/la.LoanTerm)))) + la.LoanAmount 
     FROM Customer c, LoanAccount la 
     WHERE c.Customer_ID = la.Customer_ID 
      AND c.AccountNumber = 213451 
     ) 
    , LoanDate = GETDATE() 
WHERE Customer_ID = 2; 

我不能更新所有LoanAmount用於與ID = 2,這 客戶是消息更新多行與1 FK鍵

子查詢返回大於1倍的值。當 子查詢遵循=,!=,<,< =,>,> =或當子查詢用作 表達式時,這是不允許的。

+0

子查詢不得返回多於一行。 (也許你想確保子選擇中的Customer_ID = 2) – jarlh

+0

你在LoanAccount表中有4行Customer_ID = 2,我想更新該客戶的所有金額,一個客戶可以有很多貸款在我的項目帳戶。 –

回答

1

這是因爲下面的子查詢返回多行的任何解決方案。

SELECT ((la.LoanAmount * (DATEDIFF(DAY, la.LoanDate, GETDATE()) * (la.InterestRate/la.LoanTerm)))) + la.LoanAmount 
FROM Customer c, LoanAccount la 
WHERE c.Customer_ID = la.Customer_ID 
    AND c.AccountNumber = 213451; 

這應該是正確的語法:

UPDATE LA 
SET LA.LoanAmount = ((LA.LoanAmount * (DATEDIFF(DAY, LA.LoanDate, GETDATE()) * (LA.InterestRate/LA.LoanTerm)))) + LA.LoanAmount 
    , LA.LoanDate = GETDATE() 
-- SELECT * 
FROM dbo.LoanAccount AS LA 
INNER JOIN dbo.Customer AS C 
    ON C.Customer_ID = LA.Customer_ID 
WHERE C.Customer_ID = 2 
    AND C.AccountNumber = 2; 

另外,請避免使用,因爲它是過時的老聯接語法。 This question深入討論它。

+0

非常感謝 –