sql-server - 具有插入和删除功能的通用表表达式

标签 sql-server sql-server-2005 common-table-expression

我正在开发一个存储过程,其中涉及基于存储过程中先前查询的删除和插入子句。

我从一个WITH语句开始,将一些复杂的查询构建到一个简单的CTE中,以便在删除和插入语句中使用。

但是,我似乎无法在 CTE 之后同时运行插入和删除语句。

示例代码:

WITH temp AS (SELECT id, name FROM myDBTable)
DELETE FROM thisTable WHERE .....(based on "temp")
INSERT INTO otherTable (id, name) FROM (based on "temp")

根据MSDN :

"A CTE must be followed by a single SELECT, INSERT, UPDATE, MERGE, or DELETE statement that references some or all the CTE columns. A CTE can also be specified in a CREATE VIEW statement as part of the defining SELECT statement of the view."

它说的是“单一”..声明。我无法执行多个选择/删除等操作吗?如果没有,有什么办法解决这个问题吗?

两个查询都可以单独工作,但是您可以在单个存储过程中使用该 CTE 来运行这两个查询吗?

最佳答案

如果您在删除和插入查询上使用相同的条件,您可以尝试这个

WITH temp AS (SELECT id, name FROM myDBTable)
DELETE FROM thisTable 
OUTPUT deleted.id, deleted.name into otherTable 
WHERE .....(based on "temp")

关于sql-server - 具有插入和删除功能的通用表表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19124597/

相关文章:

sql - sql游标的替代品

c# - 带有 IdentityDbContext 的 EF6 多对多无效列名

json - 带有 SQL Server 的动态 ROOT 用于 JSON PATH

Java/MSSQL : java. sql.SQLException 对象名称无效 'TableName'

sql - 删除SQL Server中除最高记录外的所有记录

sql - PostgreSQL - 管理器层次结构的递归 CTE 自连接

sql-server - 当表在SQL Server上包含点时,由错误的FROM子句引起的Sqoop无效对象名称错误

sql-server-2005 - 动态 SQL Server 2005 枢轴

sql - 这个递归 SQL CTE 究竟是如何工作的?

sql - 如何使用单个 PostgreSQL 查询进行深层复制?