光标在学生表中自动插入卷号

时间:2015-01-16 11:04:01

标签: sql-server sql-server-2008

如何从1,2,3 ......按升序顺序自动填充学生的roll number列,并在表单中指定按钮点击?

表格

enter image description here

如何调用光标? 我正在使用存储过程进行所有数据库操作。

示例代码

declare @studID int

declare rollCursor CURSOR FOR
select * from TESTING 

OPEN rollCursor 

1 个答案:

答案 0 :(得分:0)

如果你想要一个StudentId,只需写下你的程序

 -- Where @StudendId will be parameter to your stored procedure
 SELECT * FROM TESTING
 WHERE StudId = @StudendId

以下是使用CURSOR的方法。但请注意,CURSOR存在性能问题。所以很少使用它。

DECLARE @StudId INT
DECLARE @FName VARCHAR(50)
DECLARE @ROLL INT

-- Here you declare which all columns you need to loop in Cursor
DECLARE rollCursor CURSOR FOR 
select * from TESTING
WHERE StudId = @StudendId
ORDER BY StudId;

OPEN rollCursor

-- Loop starts from here 
FETCH NEXT FROM rollCursor
INTO @StudId,@FName,@ROLL

WHILE @@FETCH_STATUS = 0
BEGIN

     -- Select studentid one by one from the table
     SELECT * FROM TESTING
     WHERE StudId = @StudId

    -- Fetches next record and increments the loop
    FETCH NEXT FROM rollCursor
    INTO @StudId,@FName,@ROLL
END 

CLOSE rollCursor;
DEALLOCATE rollCursor;

编辑:1 (获取表格的行号)

如果您需要根据roll的结果,请使用以下查询

-- This will bring you the records with roll number in ascending order
-- If you want in descending order just change ASC to DESC
SELECT studid,Fname,ROW_NUMBER() OVER(ORDER BY roll ASC) roll 
FROM StudId

编辑:2 (创建身份字段)

您需要将卷号列设置为Identity field,即具有整数值的列,该值会在新插入时自动递增值。

将卷号列设置为Identity field后,请尝试使用以下插入

INSERT INTO TESTING(StudId,Fname)VALUES(10,'A')
INSERT INTO TESTING(StudId,Fname)VALUES(10,'A')

您不会在插入中选择或包含卷号列。它会自动增加。

  • Click here查看有关身份字段的更多信息