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
);