2015-01-05 40 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需要是您的列名稱。 –