【问题标题】:SQL Insert into … ( SELECT *, SCOPE_IDENTITY() FROM … )SQL 插入... ( SELECT *, SCOPE_IDENTITY() FROM ... )
【发布时间】:2013-01-23 22:42:01
【问题描述】:

我创建了一个存储过程,应该一次执行 2 次插入

第一步我想为每个插入创建一个新条目。

第二步,我将从这个条目中捕获创建的 Id

第三步我想从一个表中复制多个条目并将它们插入到同一个表中,并带有 Id

Create PROCEDURE dbo.Rolle_Copie
    @Id as int,
    @newId as int = 0,
    @Name AS nvarchar(50)
AS
    INSERT INTO Rollen (RolleName) 
    VALUES (@Name)

    @newId = SCOPE_IDENTITY()

    INSERT INTO Berechtigung_Rolle (RefRolleId,RefBerechtigungId)
        SELECT   
           RefBerechtigungId, @newId 
        FROM     
           Berechtigung_Rolle 
        WHERE    
           RefRolleId = @Id

    RETURN

但我得到一个错误

@newId 旁边的语法错误

谁能告诉我怎么了?

非常感谢任何建议

【问题讨论】:

  • 当你有一个平静的时刻来学习新东西时,看看OUTPUT。您可以使用 OUTPUT 子句从行中获取任何数据(注意复数。),例如Id 值。 OUTPUT 可以与INSERTUPDATEDELETE 一起使用,并在UPDATE 的情况下提供对前后值的访问。一个非常值得放在口袋里的工具。

标签: sql sql-server stored-procedures


【解决方案1】:

别忘了使用SET

SET @newId = SCOPE_IDENTITY()

【讨论】:

  • 是否可以在 INSERT 查询中只使用SCOPE_IDENTITY()?像这样INSERT INTO Berechtigung_Rolle (RefRolleId,RefBerechtigungId) SELECT RefBerechtigungId, SCOPE_IDENTITY() FROM Berechtigung_Rolle WHERE RefRolleId = @Id?
  • @JoeFletch 是的,我只是指出如何使用 SET 将其设置为变量
  • 看起来很合理!谢谢!抱歉,我没有批评答案,我只是想知道这是否可能。
  • @JoeFletch 不不不!不要消极地想。等一下,我会改写答案:D
  • mhh 看起来 SCOPE_IDENTITY() 不包含我需要 o.O 的值,因为我得到了 FOREIGN KEY-Restriction 这意味着我的 Id 值错误,所以我应该如何设置 SCOPE_IDENTITY ()
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多