Sql server 来自同一子表的多个计算列?

Sql server 来自同一子表的多个计算列?,sql-server,tsql,Sql Server,Tsql,我有两张桌子: CREATE TABLE [dbo].[Invoice] ( [InvoiceID] [uniqueidentifier] ROWGUIDCOL NOT NULL ) CREATE TABLE [dbo].[InvoiceItem] ( [InvoiceItemID] [uniqueidentifier] ROWGUIDCOL NOT NULL, [InvoiceID] [uniqueidentifier] NOT NULL, [PriceB

我有两张桌子:

CREATE TABLE [dbo].[Invoice]
(
    [InvoiceID] [uniqueidentifier] ROWGUIDCOL  NOT NULL
)

CREATE TABLE [dbo].[InvoiceItem]
(
    [InvoiceItemID] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    [InvoiceID] [uniqueidentifier] NOT NULL,
    [PriceBeforeTax] [decimal](12, 2) NOT NULL,
    [PriceAfterTax] [decimal](12, 2) NOT NULL
) 
Invoice
表中,我需要两个计算列:

  • 税前总消费
  • 税后总消费
我正在从函数中获取计算列:

CREATE FUNCTION ufnGetInvoiceSum
     (@InvoiceID UNIQUEIDENTIFIER)
RETURNS @T TABLE (SumBeforeTax DECIMAL(16, 2) NOT NULL,
                  SumAfterTax DECIMAL(16, 2) NOT NULL) 
AS
BEGIN 
    DECLARE @sumBeforeTax DECIMAL(16, 2)
    DECLARE @sumAfterTax DECIMAL(16, 2)

    SELECT @sumBeforeTax = SUM(PriceBeforeTax), 
           @sumAfterTax = SUM(PriceAfterTax) 
    FROM InvoiceItem 
    WHERE InvoiceID = @InvoiceID

    INSERT INTO @T (SumBeforeTax, SumAfterTax) 
    VALUES (@sumBeforeTax, @sumAfterTax)

    RETURN
END
但是如何在Invoice computed列中通过一次调用从
ufnGetInvoiceSum
获取数据

我不想调用
ufnGetInvoiceSum
来获取
TotalSumBeforeTax
,然后再次调用它来获取
TotalSumAfterax

两个计算列能否在一次调用中从同一子表获取数据

我不确定我是否能表达自己


:)

简短回答-不。您是串行预优化器。您试图过早地“优化”您的查询(没有理由),现在您看到/假设您的优化路径也需要进一步优化。不要这样做。但是,如果你认为你需要做这样的事情,那么按照你的建议去做——这仍然在等待你的回答/答案选择。我无法在我以前的帖子中正确地包含这篇帖子中的问题——要回答我以前的帖子,我需要知道这篇帖子中的问题是否可行。谢谢。作为一个过度关注性能的人,你真的需要在这里评估你的功能。您有一个多语句表值函数,它通常比标量函数还要慢。更糟糕的是根本不需要多个语句。这应该是一个select语句,然后它将是一个内联表值函数,比您的多语句版本要快得多。@SeanLange。。在我的RL函数中,我还需要使用游标等从多个表计算数据,所以很遗憾,它不能是单个select语句。Sry我不太清楚,上面只是一个测试样本。哦,上帝……帮你自己一个忙,不要把游标放在多语句表值函数中。如果必须使用游标,那么实际上最好使用标量。但我很怀疑你需要光标。几乎任何数据检索过程都可以基于集合进行。游标适用于某些管理任务和发送个性化电子邮件。否则,它们应该像瘟疫一样被避免。