SQL服务器:如何重新使用SCOPE_IDENTITY()?
SQL Server: how to re-use SCOPE_IDENTITY()?
我想对 table creneau
中的一行做一些 "copy-paste"。此行与 table creneau_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
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_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
);
我想对 table creneau
中的一行做一些 "copy-paste"。此行与 table creneau_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
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_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
);