我有一个表,其中包含有关联系人帐户余额的信息。它包含跟踪他们曾经拥有的第一张发票的日期和最后一次发票的日期以及当前余额的列。
在创建每个新发票时,需要通过一个简单的存储过程更新此表,如下所示:
CREATE PROCEDURE UpdateContactFinancialInformation
@ContactId int,
@InvoiceDate date,
@Amount money
AS
UPDATE Contacts.ContactsFinancialInformation
SET LastInvoiceDate = @InvoiceDate,
CurrentBalance = CurrentBalance + @Amount
WHERE ContactId = @ContactId创建新联系人时,将在ContactsFinancialInformation表中为其创建一个默认条目,并且FirstInvoiceDate列将具有默认值NULL。
我想在上面的基本SQL语句中添加对此的检查,以便如果FirstInvoiceDate列为NULL,它也会设置传递到存储过程中的参数@InvoiceDate。
请问最有效的方法是什么?
发布于 2013-03-12 23:38:28
UPDATE Contacts.ContactsFinancialInformation
SET LastInvoiceDate = @InvoiceDate,
FirstInvoiceDate = CASE WHEN FirstInvoiceDate IS NULL THEN @InvoiceDate ELSE FirstInvoiceDate END,
CurrentBalance = CurrentBalance + @Amount
WHERE ContactId = @ContactId不过,与COALESCE相比,这种解决方案的唯一优势是代码的可读性更强。
https://stackoverflow.com/questions/15365298
复制相似问题