[英]MSSQL controlling sequence
我需要一種管理表中序列的方法。 我有一張需要按順序管理的表。 我必須能夠在其他兩行之間插入一行。 如果我有一個從 1 到 10000 的編號序列,並且我想在 100 和 101 之間插入一行。或者我想將 99 移動到 1 和 2 之間。
這可以在 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<)。
實現此目的的一種方法是讓您的序列不連續。 也就是說,在序列上指定一個增量以留下足以放置交錯行的間隙。 如果這當然不完美,因為您可能會耗盡您的行內間隙,但這是一個開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.