【问题标题】:Reference generated primary key in SQL script在 SQL 脚本中引用生成的主键
【发布时间】:2009-01-16 00:53:21
【问题描述】:

我正在尝试使用单个脚本在数据库中创建一堆条目,我遇到的问题是如何引用我创建的上一个条目的生成主键。

例如,如果我创建了一个客户,然后尝试为该客户创建订单,我如何获取为该客户生成的主键?

我正在使用 SQLServer。

【问题讨论】:

    标签: sql sql-server primary-key


    【解决方案1】:

    像这样:

    DECLARE @customerid int;
    INSERT INTO customers(name) VALUES('Spencer');
    SET @customerid = @@IDENTITY;
    

    编辑:

    显然它需要 SCOPE_IDENTITY() 才能按预期使用触发器。

    DECLARE @customerid int;
    INSERT INTO customers(name) VALUES('Spencer');
    SET @customerid = SCOPE_IDENTITY();
    

    【讨论】:

    • 我相信在大多数情况下,scope_identity() 比@@IDENTITY 更受欢迎。
    • +1 for Joels note,scoped_identity 将优雅地处理触发器(例如,如果您有插入触发器,您的 @@identity 可能会变成假的)
    • 成功了,谢谢,我正在使用似乎支持 scope_identity() 的 SQLServer 2005。
    • Kenny,SQLServer 2005甚至2000都支持scope_identity(),使用起来比@@identity更安全。
    【解决方案2】:

    如果在您的版本中可用,请改用 SCOPE_IDENTITY()。比@@IDENTITY 更安全。

    【讨论】:

      【解决方案3】:

      如果您一次插入多行,您可以使用OUTPUT INTO feature of SQL Server 2005 or later 获取所有标识(例如,用于创建相关记录)。

      这可以避免您编写循环和游标等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-09
        • 2013-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-06
        • 2014-02-18
        相关资源
        最近更新 更多