我想创建一个从Id 300,000开始,最大值为400,000的表。
是否可以在SQL Server中执行此操作?或者我必须在其外部编写代码逻辑,以便在达到400,000这个int后再停止插入?
答案 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
时引发错误。