仅使用一个IDENTITY列将行插入表中

Phi*_*hil 79 sql t-sql sql-server stored-procedures

我有一个表管理员,只有一列,adminId是主键.由于业务规则,它必须是这样的.

我想一劳永逸地理解如何编写在这样的表中插入值的存储过程.我正在使用SQL Server和T-SQL并尝试使用SCOPE_IDENTITY(),但这不起作用,因为该表具有INSERT_IDENTITY为false或off.

我真的不想插入一个虚拟值只是为了能够插入一个新行.谢谢!

gbn*_*gbn 133

如果您有一个IDENTITY列,请执行此操作

INSERT MyTable DEFAULT VALUES;  --allows no column list. The default will be the IDENTITY
SELECT SCOPE_IDENTITY();
Run Code Online (Sandbox Code Playgroud)

如果你没有身份,那么你可以设置吗?这是最好的方法..并使用上面的SQL.

如果没有,您想插入一个新行

INSERT MyTable (admidid)
OUTPUT INSERTED.admidid --returns result to caller
SELECT ISNULL(MAX(admidid), 0) + 1 FROM MyTable
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 在高负载下,MAX解决方案可能会重复出现故障
  • SCOPE_IDENTITY是事后,而不是之前
  • SCOPE_IDENTITY仅适用于IDENTITY列.同样使用IDENT_CURRENT的白痴
  • 输出子句替换MAX解决方案的SCOPE_IDENTITY

  • 你的第一个命题运作良好.谢谢! (3认同)