INSERT INTO t_MT_User (ID, Badge, Name, Scope, comp_code, dept_code, [status])
VALUES ((SELECT MAX(ID) + 1 FROM t_MT_User), @userBadgeNumber, @userName, @userScope, @companyCode, @departmentCode, 1)
此查询将引发以下错误:
在此上下文中不允许使用子查询。只允许使用标量表达式。
如果我将VALUES
更改为SELECT
,我会收到另一个错误:
INSERT INTO t_MT_User (ID, Badge, Name, Scope, comp_code, dept_code, [status])
SELECT
((SELECT MAX(ID) + 1 FROM t_MT_User),
@userBadgeNumber, @userName, @userScope, @companyCode,
@departmentCode, 1)
','附近的语法不正确。
如何在此上下文中实现(SELECT MAX(ID) + 1 FROM t_MT_User)
?
答案 0 :(得分:6)
首先是第一件事 - 您的代码,即使您修复了它的语法,也是错误的。
好像你试图实现自己的自动增量机制。 那会失败。
正确的方法是使用SQL Server的内置机制进行自动增量,并将ID
列创建为Identity
。
然后您根本不需要将它包含在insert语句中,即使在多客户端或多线程环境中(您当前的实现将开始给出错误的结果),您也是安全的。
答案 1 :(得分:3)
你的语法错了。应该是
INSERT INTO t_MT_User (ID, Badge, Name, Scope, comp_code, dept_code, [status])
SELECT MAX(ID) + 1 , @userBadgeNumber, @userName, @userScope,
@companyCode, @departmentCode, 1
FROM t_MT_User