我正在开发一个存储过程,其中涉及基于存储过程中先前查询的删除和插入子句。
我从一个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/