相关疑难解决方法(0)

从CTE更新表中的记录

我有以下CTE,它将为我提供整个发票的DocTotal.

 ;WITH CTE_DocTotal
 AS
 (
   SELECT SUM(Sale + VAT) AS DocTotal
   FROM PEDI_InvoiceDetail
   GROUP BY InvoiceNumber
 )

UPDATE PEDI_InvoiceDetail
SET DocTotal = CTE_DocTotal.DocTotal
Run Code Online (Sandbox Code Playgroud)

现在有了这个结果,我想在PEDI_InvoiceDetail中输入DocTotal值列.

我知道不会工作,我知道我错过了什么,它是什么?

sql t-sql sql-server common-table-expression

58
推荐指数
3
解决办法
11万
查看次数

通过加入从CTE中删除

我正在尝试使用sql表实现FIFO队列.

我有以下SQL(修改后发布),连接和参数使用对此过程的工作方式很重要.

With cte as (
   select top(1) q.* from queue q with (readpast)
   inner join MyTable a on q.id = a.myTableID AND myTable.procID = @myParam
   order by q.Data asc
)
delete from cte
    output
      deleted.ID,
      deleted.col1
Run Code Online (Sandbox Code Playgroud)

运行此语句将返回错误'视图或函数'cte'不可更新,因为修改会影响多个基表.

我理解为什么会抛出错误,我无法弄清楚如何解决它.任何建议将不胜感激!

sql sql-server-2008

8
推荐指数
2
解决办法
1万
查看次数

为什么CTE比光标/派生表/子查询/临时表等更好?

与派生表/子查询/临时表等方法相比,CTE如何以及为什么提供更好的性能?

临时数据库中发生任何临时计算.因此,如果我们有一个游标方法,它还会在临时数据库中创建临时表/工作表,一旦操作结束,该工作表就会被销毁.我对CTE的理解是,它也做同样的事情(或者它是否会在内存中创建临时结果?从而提高性能)那为什么它比上面的方法更好,比如游标/派生表/子查询/临时表等?

sql-server common-table-expression

5
推荐指数
1
解决办法
1万
查看次数