我正在将数据库从 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 中执行此操作,因为它没有临时表,而且我似乎无法从现有表创建表变量?
如果我没看错的话,你不需要临时变量,因为你有一个临时表。我将在这里使用表变量而不是临时表,然后您不必删除它,因为当它超出范围时会发生这种情况。
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;