你能设定一个自动增量达到的最大值

时间:2016-12-08 20:48:17

标签: sql sql-server

我想创建一个从Id 300,000开始,最大值为400,000的表。

是否可以在SQL Server中执行此操作?或者我必须在其外部编写代码逻辑,以便在达到400,000这个int后再停止插入?

3 个答案:

答案 0 :(得分:3)

我使用CHECK约束而不是触发器,但您可以轻松设置列的起始值和允许值范围。

创建一个测试表:

IF OBJECT_ID('tempdb..#test') IS NOT NULL DROP TABLE #test
CREATE TABLE #test (
    ID INT IDENTITY(10,1) /* Start at 10, increment by 1 */
    , [Text] VARCHAR(100)
)
GO

添加约束

ALTER TABLE #test
ADD CONSTRAINT CK_IDRange CHECK (ID >= 10 AND ID <= 20)
GO

创建一些行

INSERT INTO #test ([Text])
VALUES (NEWID())
GO 11

SELECT * FROM #test

故障

INSERT INTO #test ([Text])
VALUES ('should fail')

答案 1 :(得分:1)

没有选项为标识列设置上限。

您可以使用以下方法轻松设置身份的开头:

column INT NOT NULL IDENTITY (300000, 1)

然后,对于第二个要求,您应该创建一个插入触发器来检查行数(或标识值),如果已达到最大值则返回错误。 你可以在这个问题上得到一个例子:Set Limit for a Table Rows In SQL

答案 2 :(得分:0)

USE DBCC CHECKIDENT(Transact-SQL)

  

检查SQL Server 2016中指定表的当前标识值,如果需要,则更改标识值。您还可以使用DBCC CHECKIDENT为标识列手动设置新的当前标识值。

还有一个插入触发器,用于在> 400k时引发错误。