【问题标题】:Getting the primary key of a newly inserted row in SQL Server CE and C#?在 SQL Server CE 和 C# 中获取新插入行的主键?
【发布时间】:2012-07-11 01:30:56
【问题描述】:

我正在向自动生成主键的 SQL Server CE 表中插入,插入完成后我将如何获取主键?

【问题讨论】:

    标签: c# sql compact-framework sql-server-ce


    【解决方案1】:

    假设您的主键是一个标识字段,您可以在插入新行后使用查询SELECT @@IDENTITY

    【讨论】:

    • 并且不要关闭上面的 INSERT 和 SELECT 之间的连接。
    • @keith 请问如何在本地验证中获取这个@@Identity 值?提前致谢
    【解决方案2】:

    你必须小心这样做。您需要做的是在一个事务中将您的选择设置为:

    IDbCommand.CommandText += "; select scope_identity()";
    object rtn = cmd.ExecuteScalar();
    return (long)(decimal)rtn;
    

    事务中的单个选择是关键,因为调用 select scope_identity() 不是插入的主键,它是最近的插入。因此,您最终可能会得到另一个插入的主键,该主键发生在您的插入之后,但在您请求最近的 PK 插入之前。

    注意:scope_identity() 可能(重复可能)现在与 IDbCommand 相关联,但过去并非如此,遵循上述内容是安全的。

    【讨论】:

    • @ErikEJ - 你遇到了什么问题?我已经成功地将它与 CE 一起使用。
    • SQL Server Compact 不能使用同一语句中的多个命令或 socpe_identity() - 你是说 Express 吗?
    【解决方案3】:

    你可以发现你的主键是表中的一个标识字段

    SELECT IDENT_CURRENT(‘表名’)

    http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多