【问题标题】:Identify of Currently Inserting Row当前插入行的标识
【发布时间】:2011-08-23 23:07:49
【问题描述】:

我正在做一个项目,问题出现了:插入语句可以将自己的身份插入到另一个字段中吗?

想法是记录的层次结构排列,“父”字段将指向父记录的 ID,而给定树的“顶部”记录将仅指向自身。

我们当然可以把它留给父级,或者稍后回来插入它的 ID。但我想知道在插入记录时是否有任何 SQL Server 操作将 IDENTITY 插入另一个字段?

编辑:或者有没有办法将一个字段的默认值指定为另一个字段的值?这样也能解决问题。

编辑:默认字段是另一个字段似乎已经被回答,答案是否定的,使用触发器。当然,这无助于约束和非空字段的问题。 (http://social.msdn.microsoft.com/Forums/en/sqltools/thread/661d3dc8-b053-47b9-be74-302ffa11bf76)

【问题讨论】:

    标签: sql-server insert identity identity-column


    【解决方案1】:

    没有。对于这种层次结构,除非您使用 SET IDENTITY_INSERT ON 插入显式 ID 值,否则您需要先插入顶层并使用 SCOPE_IDENTITYOUTPUT 子句来获取插入的 ID 用于下一层。

    【讨论】:

      【解决方案2】:

      在一定程度上可以。插入允许OUTPUT 子句,并且可以将输出重定向到一个表中,该表可以与您当前插入的表相同。以下示例插入了一个父节点,但它也自动插入了一个子节点,该子节点在插入期间将 parent_id 设置为新生成的 ID:

      create table hierarchy (
          id int identity(1,1) not null primary key, 
          parent_id int null, 
          somefield varchar(100));
      
      
      insert into hierarchy (parent_id, somefield)
          output inserted.id, 'child'
          into hierarchy (parent_id, somefield)
      values (null, 'parent');    
      
      select * from hierarchy;
      

      虽然我看不到任何实际用途,这更像是一个表演帽子戏法。

      【讨论】:

      • 知道这一点非常有用,但我希望在 ID 字段之外的另一个字段中插入一条带有 ID 的记录。这样做的原因仅在记录是父记录的情况下,因此它将自己指定为父记录,而不是其他一些预先存在的记录。
      猜你喜欢
      • 2010-10-23
      • 1970-01-01
      • 2012-02-23
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      相关资源
      最近更新 更多