SQL查询用于INT列(标识)以限制介于1到100之间的值

时间:2015-04-21 04:11:57

标签: sql-server

假设我们有100个学生限制类,我们在{1-1}之间创建一个列StudentId列超出此限制的学生ID不生成

Create Table Class
(
StudentId Int Primary Key Identity(1,1)
StudentName Varchar(25) 
) 


insert into Class values('Jhon')
/* 2 ..
..
..
To 100 (Column) */
insert into Class values('Joy')

记录101

insert into Class values('Joy') ---当我们插入101行时,将发生错误

3 个答案:

答案 0 :(得分:4)

CREATE TABLE RegTable
(StudentId NUMBER(8,0),
CONSTRAINT CheckRegNumber  CHECK (StudentId <=100 and StudentId >0 )
);

在您的int列中添加CONSTRAINT

答案 1 :(得分:0)

CREATE TRIGGER LimitCount
For INSERT On Student
AS
    If (SELECT COUNT(StudentId) From STUDENT) > 100
       --DO SOMETHING OR ROLLBACK

关于这一点的一个缺点是它不能保证,如果删除时行实际上是100。所以你必须在DO SOMETHING部分做更多的事情

答案 2 :(得分:0)

如果您想将ClassTable限制为100行,则可以创建after insert触发器。由于您的列是identity列,因此您不能依赖于ID,因为您可能处于无法插入行但您的学生少于100人的情况下。插入和删除行时通常会发生这种情况。解决此问题的一种方法是resetting标识列和DBCC CHECKIDENT命令,您不希望每次都执行此操作。

CREATE TRIGGER LimitRows
 on ClassTable
 after insert
 as
    declare @rowsCount int
    select @rowsCount = Count(*) from ClassTable
    if @rowsCount > 100
    begin
      rollback
    end