sql - 首先插入,然后 - 如果可以 - 删除

标签 sql sql-server-2005

此 SQL SERVER 2005 语句首先删除按 FIELD1 ASC 排序的 18 条记录,然后在克隆表中插入相同的 18 条记录:

WITH  q AS
        (
        SELECT TOP 18 *
        FROM    pippo
        ORDER BY FIELD1 ASC /* You may want to add ORDER BY here */
        )
DELETE
FROM    q
OUTPUT DELETED.* INTO TableNew

请帮我转换前面的语句,以便首先 INSERT,然后 THEN - IF INSERT 已经成功 - 删除相同的18条记录;我刚试过,但下面的代码给出了错误,

消息 102,级别 15,状态 1,第 7 行“INSERTED”附近的语法不正确。

WITH  q AS
        (
        SELECT TOP 18 *
        FROM    pippo
        ORDER BY ID_OL ASC /* You may want to add ORDER BY here */
        )
insert into tablenew select * from q OUTPUT INSERTED.* INTO TABLENEW

预先感谢您的帮助。

最佳答案

declare @some_temp_table table (ID_OL int)

WITH  q AS
        (
        SELECT TOP 18 *
        FROM    pippo
        ORDER BY ID_OL ASC /* You may want to add ORDER BY here */
        )
insert into minnie
OUTPUT INSERTED.ID_OL INTO @some_temp_table
select * from q

delete from pippo where ID_OL in (select ID_OL from @some_temp_table)

另一个版本

set xact_abort on

declare @filter table (ID_OL int primary key)

insert into @filter (ID_OL)
SELECT TOP 18 ID_OL
FROM pippo
ORDER BY ID_OL ASC

begin transaction

insert into minnie 
select * from pippo where ID_OL in (select ID_OL from @filter)

delete from pippo where ID_OL in (select ID_OL from @filter)

commit transaction

关于sql - 首先插入,然后 - 如果可以 - 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12935103/

相关文章:

MySQL 跳过 auto_increment 值

sql - 如何从表中加入 COUNT,然后用另一个 JOIN 影响该 COUNT

sql-server - SQL Server 索引 View 列精度

c# - 无法使SQL Server Compact 3.5/4与ASP .NET MVC 2一起使用

sql-server - 全文搜索排名(SQL Server)

java - sql 查询在 sqlDeveloper 中运行时有效,但在使用 hibernate 时无效

sql - 得到两个计数,然后将它们相除

MySQL 查询优化消除不必要的连接

sql-server - 如何在 SQL Server Integration Services 项目中使用目录服务的 OLE DB 提供程序?

sql-server - 在 SQL Server 中解析 XML