Sql server SQL Server:如何重新使用SCOPE_IDENTITY()?

Sql server SQL Server:如何重新使用SCOPE_IDENTITY()?,sql-server,Sql Server,我想对表中的一行进行某种“复制粘贴”creneau。此行与表creneau\u jour具有一对多关系。因此,我也想复制这个关系的所有行。我正在尝试做我用MySQL做过的事情,但我遗漏了一些东西,但不知道为什么: INSERT INTO [RdV].[dbo].[creneau] ([libelle] ,[debut] ,[fin] ,[heure_debut] ,[duree])

我想对表中的一行进行某种“复制粘贴”
creneau
。此行与表
creneau\u jour
具有一对多关系。因此,我也想复制这个关系的所有行。我正在尝试做我用MySQL做过的事情,但我遗漏了一些东西,但不知道为什么:

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
);
知道我做错了什么吗?

试试这个

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

您可以忘记使用
SCOPE\u IDENTITY()
而将
OUTPUT
用作
INSERT
的一部分,这样就可以使用新创建的行中的值设置变量

这种方法的一个优点是,如果启用identity insert,那么@SCOPE\u 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
);

只需将其分配到一个变量中,然后使用该变量?@Piyush好的,也许这对您来说很简单,但这是我第一次使用SQL server Management Studio。。。我可以请您做一个完整的回答吗?
Msg 156,Niveau 15,État 1,Ligne 13关键字“SELECT”附近的语法不正确。
我修改了查询,请尝试一下。。。我修改了您的答案以反映发生的情况,错误是
子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。
您只需完全复制我的答案吗?我取出了我查看问题时您在其中的子查询。您好,谢谢您的回答,但是复制/粘贴您的代码不起作用,明天我会告诉你确切的错误。可能
OUTPUT inserted.IdentityColumn INTO@Identity
有错误,因为IdentityColumn需要是您的列名。
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
);