我们可以更改已存在的标识列的步长值吗?如果是,最大值是多少?
由于
答案 0 :(得分:4)
是的,您必须创建新表的副本,使用旧表中的数据填充它,删除旧表,重命名副本。您可以通过更改SSMS GUI中的步长并查看生成的脚本来查看如何。
最大步长?根据{{3}},我猜你的列数据类型一样高。因此,对于tinyint等,不要使用从1开始的4000增量
答案 1 :(得分:2)
您可以将此作为仅元数据更改。下面的示例代码。
--Seed Set to 1
CREATE TABLE dbo.tblFoo
(
id INT IDENTITY(1,1) PRIMARY KEY,
baz INT
)
INSERT INTO dbo.tblFoo
SELECT TOP (10000) ROW_NUMBER() OVER (ORDER BY (SELECT 0))
FROM master..spt_values v1, master..spt_values v2
--Change Seed to 7
BEGIN TRY;
BEGIN TRANSACTION;
SELECT TOP 0 id
FROM dbo.tblFoo
WITH (TABLOCKX,HOLDLOCK)
DECLARE @TableScript nvarchar(max)
SELECT @TableScript =
'
CREATE TABLE dbo.Destination(
id INT IDENTITY(' +
CAST(ISNULL(IDENT_CURRENT('tblFoo'),0)+1 AS VARCHAR) + ',7) PRIMARY KEY,
baz INT
)
ALTER TABLE dbo.tblFoo SWITCH TO dbo.Destination;
'
EXEC(@TableScript)
DROP TABLE dbo.tblFoo;
EXECUTE sp_rename N'dbo.Destination', N'tblFoo', 'OBJECT';
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
PRINT ERROR_MESSAGE();
END CATCH;
INSERT INTO dbo.tblFoo
OUTPUT INSERTED.*
VALUES (1),(2)
答案 2 :(得分:0)
仅通过重新创建和重新填充表格