我试图编写一个存储过程来返回列+ 1的最大值但由于某种原因它不想工作。
DECLARE @ID int;
SET @ID = SELECT MAX(ID) + 1 FROM tbl;
我不能为我的生活看到错误。
它给了我错误:
错误的语法新关键字' SELECT'
答案 0 :(得分:4)
无需SET
。直接选择值:
DECLARE @ID int;
SELECT @ID = MAX(ID) + 1 FROM tbl;
答案 1 :(得分:3)
使用括号( ... )
:
DECLARE @ID int;
SET @ID = (SELECT MAX(ID) + 1 FROM tbl);
或SELECT
为suggested by Giorgi。 SET
是为变量赋值的ANSI标准方法,SELECT
不是。除了使用SELECT
将值分配给变量之外,还可以使用一个SELECT
进行多次分配。
但一般来说,你的查询似乎是竞争条件。如果要自动增量值,请使用IDENTITY
column。 Auto increment primary key in SQL Server Management Studio 2012
答案 2 :(得分:2)
当表中没有值且MAX返回NULL时,您需要考虑一个场景。
DECLARE @ID int;
SELECT @ID = ISNULL(MAX(ID) , 0) + 1 FROM tbl;
将null添加到null将始终产生null。
答案 3 :(得分:1)
DECLARE @ID int;
SET @ID = (SELECT MAX(ID) + 1 FROM tbl);
括号运算符()
了解更多信息