使用自增键复制记录

问题描述 投票:0回答:1

我正在将数据库从 MySQL 迁移到 SQL Server。在 MySQL 中我有这样的存储过程:

Declare cidx int;

DROP TEMPORARY TABLE IF EXISTS coretmp1;

Create temporary table coretmp1 SELECT * FROM corebuild order by Idx desc limit 1;
select Idx+1 from coretmp1 into cidx;
UPDATE coretmp1 SET Idx = cidx, Piece=0;
INSERT INTO corebuild SELECT * FROM coretmp1;

DROP TEMPORARY TABLE IF EXISTS coretmp1;

Select cidx;

这样,即使表被更改,所有列都会被复制,并生成一个新的顺序键,该键由脚本返回。我如何在 SQL Server 中执行此操作,因为它没有临时表,而且我似乎无法从现有表创建表变量?

sql sql-server
1个回答
0
投票

如果我没看错的话,你不需要临时变量,因为你有一个临时表。我将在这里使用表变量而不是临时表,然后您不必删除它,因为当它超出范围时会发生这种情况。

DECLARE @coretmp AS TABLE (
    (put all actual columns here)
    Piece BIGINT,
    Idx INT
)

INSERT INTO @coretmp (
    (put all actual columns here)
    Piece,
    Idx
)
SELECT TOP(1)
    (put all actual columns here)
    0 AS Piece,
    Idx + 1
FROM corebuild
ORDER BY Idx DESC;

INSERT INTO corebuild (
    (put all actual columns here)
    Piece,
    Idx
)
SELECT
    (put all actual columns here)
    Piece,
    Idx
FROM @coretmp
ORDER BY Idx DESC;

/* return the updated value */
SELECT
    Idx
FROM @coretmp;
© www.soinside.com 2019 - 2024. All rights reserved.