Sql 从SP获取主键

Sql 从SP获取主键,sql,stored-procedures,insert,primary-key,Sql,Stored Procedures,Insert,Primary Key,使用SQL,当从SP向表中插入值时,是否可以在将值添加到表中之前获取主键的值?这当然是可能的,可以利用关系数据库的功能。正如Martin Smith所说,假设您使用的是一个自动生成的密钥,那么您就可以使用事务来完成所需的工作 以下是总体思路: 开始一项交易 进行插入 使用主键执行任何需要执行的操作,包括更新插入的行以反映值 提交或回滚 通过在插入之前开始事务,可以确保在提交事务之前,其他人无法看到新行。如果密钥不符合您的喜好,您可以回滚事务,其他人不会知道。如果密钥足够,则可以在提交之前修改刚刚

使用SQL,当从SP向表中插入值时,是否可以在将值添加到表中之前获取主键的值?

这当然是可能的,可以利用关系数据库的功能。正如Martin Smith所说,假设您使用的是一个自动生成的密钥,那么您就可以使用事务来完成所需的工作

以下是总体思路:

  • 开始一项交易
  • 进行插入
  • 使用主键执行任何需要执行的操作,包括更新插入的行以反映值
  • 提交或回滚
  • 通过在插入之前开始事务,可以确保在提交事务之前,其他人无法看到新行。如果密钥不符合您的喜好,您可以回滚事务,其他人不会知道。如果密钥足够,则可以在提交之前修改刚刚插入的行


    由于您有一个事务,其他人无法看到您在提交之前插入的中间数据。因此,您可以更新刚刚插入的行,就像您在实际插入之前拥有主键一样。

    如果您使用的是SQL Server,最好的方法是使用MERGE或insert命令,使用OUTPUT子句取回密钥。即使这不是在插入之前,您也可以使用输出的结果连接回数据的结果以插入后续子记录


    此外,如果您使用的是SQL server,则可以查看IDENT_CURRENT函数,该函数将返回表的当前标识值。如果您是以基于集合的方式编写SQL,那么我上面提到的输出最适合我

    “在将值添加到表中之前”?不,因为有人可能会在你之前进入并插入一些东西。您试图解决什么问题?@spender-您似乎假设
    IDENTITY
    使用外部生成的PK值(如序列或GUID)肯定是可能的。SQL只是结构化查询语言-许多数据库系统使用的语言,但不是数据库产品。。。许多事情都是特定于供应商的-因此我们确实需要知道您使用的是什么数据库系统(以及哪个版本)(请相应地更新标记)…取决于主键是什么。您是插入它,还是SP生成它,还是它在表中自动递增?这当然是可能的。告诉我们您使用的是什么DBMS以及表结构的示例,也许有人可以为您提供更多帮助。