T-SQL:相对于另一列创建列序列

时间:2013-07-01 08:01:54

标签: sql-server tsql indexing sequence

假设我的下表有值

StudentNumber      StudentName       Class
---------------------------------------------
      0              'A'              100              
      1              'B'              100              
      0              'C'              200              
      1              'D'              200              
      2              'E'              200                    

我想声明StudentNumber作为相对于班级编号的序列。

如果我将StudentName='F'插入

  • 100级,它将为其分配2
  • 200级,它将为其分配3
  • 300级,它将为其分配0

如果无法使用索引。是否可以在insert命令中“按类选择最大值”。

(我更喜欢在单个命令中执行此操作以避免死锁等)

1 个答案:

答案 0 :(得分:1)

这对我有用(SQL Server 2005)。如果这种首先设置变量的方法不能满足您的需求,那么您可能需要考虑将其作为插入触发器,并插入名称和类值。然后,DB可以提供studentNumber值。

CREATE TABLE t_sw (
studentNumber INT,
studentName VARCHAR(MAX),
class INT
)
GO


DECLARE @name VARCHAR(MAX)
DECLARE @class INT

SET @name = 'F'
SET @class = 300

INSERT INTO t_sw (studentNumber, studentName, class)
SELECT  COALESCE(MAX(studentNumber) + 1, 0), @name, @class
FROM    t_sw
WHERE   class = @class

SELECT * FROM t_sw