我需要一种管理表中的序列的方法。我有一张需要由序列管理的表格。我必须能够在另外两行之间插入一行。 如果我有一个从1到10000的数字序列,并且我想要插入一个100到101之间的行。或者我想将99移动到1和2之间。MSSQL控制序列
这可以在SQL中管理还是需要以编程方式管理它。
我需要一种管理表中的序列的方法。我有一张需要由序列管理的表格。我必须能够在另外两行之间插入一行。 如果我有一个从1到10000的数字序列,并且我想要插入一个100到101之间的行。或者我想将99移动到1和2之间。MSSQL控制序列
这可以在SQL中管理还是需要以编程方式管理它。
SQL Server表没有任何隐式命令!
强制执行序列的唯一方法是具有唯一值的可排序列(或列的组合)。实现这一
一个办法是后号码您行现有排序关键字:
NOT NULL
后,并创建一个unique index
)这充分工作的例子会告诉你如何做到这一点:
CREATE TABLE #Dummy(SomeExistingSortField INT, SomeContent VARCHAR(100));
INSERT INTO #Dummy VALUES(3,'insert first'),(1,'insert second'),(2,'insert third');
SELECT * FROM #Dummy;
ALTER TABLE #Dummy ADD SortKey BIGINT;
WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT SomeExistingSortField)) * 10 AS nr
,SortKey
FROM #Dummy
)
UPDATE CTE SET SortKey=nr;
SELECT * FROM #Dummy ORDER BY SortKey;
INSERT INTO #Dummy VALUES(99,'between 1 and 2',15);
SELECT * FROM #Dummy ORDER BY SortKey;
WITH CTE AS
(
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT SortKey)) * 10 AS nr
,SortKey
FROM #Dummy
)
UPDATE CTE SET SortKey=nr;
SELECT * FROM #Dummy ORDER BY SortKey;
GO
DROP TABLE #Dummy;
SQL不会以任何特定顺序在表中存储数据,它只是在您使用索引或其他查询查看数据时出现的方式。您必须拥有用于对数据进行排序的ID列。在两个当前行之间插入数据并不容易(例如,要在100和101之间插入数据,需要对所有数据重新编号101 <)。
一个办法accompl这是为了让你的序列不连续。也就是说,在序列上指定一个增量以留出足够空间以放置交错行。如果当然这不是完美的,因为你可能会耗尽你的行内空白,但这是一个开始。
@ user625079,对不起,你是对的,我是这个快...我将修改我的答案在几分钟内... – Shnugo
我想这 SELECT Q.RowNumber FROM(SELECT ROW_NUMBER ()OVER(ORDER BY [oldkey])* 10 AS RowNumber FROM Mytable )AS Q ORDER BY RowNumber及其好的。但是,当我更新我只加10在每一个新seqkey – user625079
此更新将在10所有seqkey UPDATE MYTABLE SET SeqKey = Q.RowNumber FROM(SELECT ROW_NUMBER()OVER(ORDER BY oldkey)* 10 ROWNUMBER FROM mytable )AS Q – user625079