将起点的标识设置为变量值

时间:2016-12-21 13:47:42

标签: sql sql-server

我有一个名为Students的表,我希望在列表中获得最大ID,以便我可以创建一个新列表,其他学生以id作为Students表中的最新值。代码中的解释如下:

declare @maxStudentId int
set @maxStudentId = (select max(StudentId) + 1 from Students)

create table #tempStudents
(
  tempId int identity(@maxStudentId, 1) primary key,
  maxGrade int
)

我在Students表中可用的最大ID值之后有下一个值。例如,学生中的最后一个ID是100,所以在@maxStudentId中我的值为101。 对于新表,我想将起始ID设置为101,但在尝试设置identity(@maxStudentId, 1)时出错,因为变量不是数字或整数,+或 - 。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

你可以通过动态sql来做到这一点,这是一个如何做的例子

declare @SQL varchar(max)

declare @maxStudentId int
set @maxStudentId = (select max(StudentId) + 1 from Students)

set @SQL = 'create table #tempStudents ' +
           '( ' +
           'tempId int identity(' + convert(varchar, @maxStudentId) + ', 1) primary key, ' +
           'maxGrade int ' +
           ') '

EXEC SP_EXECUTESQL @SQL

变量@SQL将包含类似

的内容
  

create table #tempStudents(tempId int identity(101,1)primary key,maxGrade int)