Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否可以在多个更新中使用WITH子句而不将其复制到每个更新中?_Sql_Postgresql_Sql Update_With Statement - Fatal编程技术网

Sql 是否可以在多个更新中使用WITH子句而不将其复制到每个更新中?

Sql 是否可以在多个更新中使用WITH子句而不将其复制到每个更新中?,sql,postgresql,sql-update,with-statement,Sql,Postgresql,Sql Update,With Statement,例如,我需要选择一个用户文件的所有ID,并在一行中的几个更新中使用这些ID。除了将其复制并粘贴到每个更新查询中之外,是否有其他方法可以在多个更新中使用WITH?是否在单个存储过程/事务中运行所有更新查询?如果是这样,只要将CTE的结果写入一个临时表或一个表变量就行了,如果你很精明的话——但是它们很难调试——啊,很好地重复使用,然后在完成后将其删除。当然,你会受到一点点IO性能的影响,但它会让你的代码更干净。这基本上就是临时表的用途——中间数据存储。不,这不太可能。有关TSQL,请参阅: 它派生自

例如,我需要选择一个用户文件的所有ID,并在一行中的几个更新中使用这些ID。除了将其复制并粘贴到每个更新查询中之外,是否有其他方法可以在多个更新中使用WITH?

是否在单个存储过程/事务中运行所有更新查询?如果是这样,只要将CTE的结果写入一个临时表或一个表变量就行了,如果你很精明的话——但是它们很难调试——啊,很好地重复使用,然后在完成后将其删除。当然,你会受到一点点IO性能的影响,但它会让你的代码更干净。这基本上就是临时表的用途——中间数据存储。

不,这不太可能。有关TSQL,请参阅:

它派生自一个简单的查询,并在单个SELECT、INSERT、UPDATE、MERGE或DELETE语句的执行范围内定义

在PostgreSQL中,它是相同的:

这些语句通常被称为公共表表达式或CTE,可以被视为定义只存在于一个查询中的临时表

更改以使其能够处理更多查询的最简单方法是重写它以选择到查询中:


你确定这样不行吗?从上面的链接,或者


QuelSQL?答案取决于实施情况啊,对不起。在这种情况下,您可以使用RETURNING子句来链接查询。在任何情况下,都不需要CTE。引用它也会导致对其进行多次扫描。只有当所有I/U查询都指向同一组CTE元组时,才能使用RETURNING。@MartinCarney回答编辑为包含PostgreSQL的详细信息,对不起,我假设这是TSQL。请让我知道SELECT INTO部分是否正常工作,我不能100%确定PostgreSQL中是否也使用定义了临时表。可能通过多次更新,OP意味着多次更新语句。无论如何,您可能不应该在回答PostgreSQL问题时引用MSDN。同意,但仅供将来参考,postgres中的update语句支持WITH子句-
SELECT a,b,c
INTO #TemporaryTable
WHERE a<>b

(do something)

DROP TABLE #TemporaryTable
WITH Parts(AssemblyID, ComponentID, PerAssemblyQty, EndDate, ComponentLevel) AS
(
    SELECT your data ....
)
UPDATE Production.BillOfMaterials
SET PerAssemblyQty = c.PerAssemblyQty * 2
FROM Production.BillOfMaterials AS c
JOIN Parts AS d ON     c.ProductAssemblyID = d.AssemblyID
WHERE d.ComponentLevel = 0;