2015-01-05 32 views
0

我想在表creneau的表中做一行“复制粘贴”。该行与表creneau_jour有一对多的关系。因此我想重复这个关系的所有行。我试图做我已经用MySQL做的事情,但我错过了一些东西,但不知道为什么:SQL Server:如何重新使用SCOPE_IDENTITY()?

INSERT INTO [RdV].[dbo].[creneau] 
      ([libelle] 
      ,[debut] 
      ,[fin] 
      ,[heure_debut] 
      ,[duree]) 
    SELECT 
     'Encore !!!', debut, fin, heure_debut, duree 
    FROM 
     creneau 
    WHERE 
     id = 1; 

INSERT INTO [RdV].[dbo].[creneau_jour] 
      ([creneau_id] ,[jour_semaine]) 
VALUES (
    SELECT SCOPE_IDENTITY(), SELECT jour_semaine FROM creneau_jour WHERE id=1 
); 

任何想法我做错了什么?

+0

只要将它分配给一个变量,然后使用该变量? – HaveNoDisplayName

+0

@Piyush好的,也许这对你很简单,但这是我第一次使用SQL Server Management Studio ...我可以请你做一个完整的答案吗? –

回答

1
DECLARE @SCOPEIDENTITY INT; 
INSERT INTO [RdV].[dbo].[creneau] 
      ([libelle] 
      ,[debut] 
      ,[fin] 
      ,[heure_debut] 
      ,[duree]) 
    SELECT 'Encore v3',debut,fin,heure_debut,duree FROM creneau WHERE id=1; 

SET @SCOPEIDENTITY = SCOPE_IDENTITY(); 
INSERT INTO [RdV].[dbo].[creneau_jour] ([creneau_id] ,[jour_semaine]) 
SELECT @SCOPEIDENTITY, jour_semaine FROM creneau_jour WHERE creneau_id=1 
; 

GO 
+1

你只是复制我的答案? – HaveNoDisplayName

+0

当我看到问题时,我拿出了你在那里的子查询。 – HLGEM

0

试试这个

DECLARE @SCOPEIDENTITY INT; 
INSERT INTO [RdV].[dbo].[creneau] 
      ([libelle] 
      ,[debut] 
      ,[fin] 
      ,[heure_debut] 
      ,[duree]) 
    SELECT 'Encore v3',debut,fin,heure_debut,duree FROM creneau WHERE id=1; 

SET @SCOPEIDENTITY = SCOPE_IDENTITY(); 
INSERT INTO [RdV].[dbo].[creneau_jour] ([creneau_id] ,[jour_semaine]) 
SELECT @SCOPEIDENTITY, jour_semaine FROM creneau_jour WHERE creneau_id=1; 

GO 
+0

'Msg 156,Niveau 15,État1,Ligne 13 关键字'SELECT'附近的语法不正确。' –

+0

我修改了查询,尝试了 – HaveNoDisplayName

+0

差不多......我修改了你的答案以反映发生了什么,错误是'Subquery返回了超过1个值。当子查询遵循=,!=,<, <= , >,> =或当子查询用作表达式时,这是不允许的。“# –

1

你可以忘记使用SCOPE_IDENTITY()和使用OUTPUT作为INSERT的一部分,这样就可以设置一个变量与新创建的行的值。

这种方法的一个优点是,如果你曾经打开身份插入,那么@SCOPE_IDENTITY将不起作用,但使用OUTPUT的方法会。

DECLARE @Identity INT 

INSERT INTO [RdV].[dbo].[creneau] 
      ([libelle] 
      ,[debut] 
      ,[fin] 
      ,[heure_debut] 
      ,[duree]) 
OUTPUT inserted.IdentityColumn INTO @Identity 
    SELECT 
     'Encore !!!', debut, fin, heure_debut, duree 
    FROM 
     creneau 
    WHERE 
     id = 1 

INSERT INTO [RdV].[dbo].[creneau_jour] 
      ([creneau_id] ,[jour_semaine]) 
VALUES (
    SELECT @Identity, SELECT jour_semaine FROM creneau_jour WHERE id=1 
); 
+0

嗨,谢谢你的回答,但复制/粘贴你的代码不起作用,明天我会告诉你确切的错误。 –

+0

可能是'OUTPUT inserted.IdentityColumn INTO @ Identity'出现错误,因为IdentityColumn需要是您的列名称。 –