Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取多个插入的作用域标识_Sql_Sql Server - Fatal编程技术网

Sql 获取多个插入的作用域标识

Sql 获取多个插入的作用域标识,sql,sql-server,Sql,Sql Server,它应该得到这三个标识,并且应该在表3中插入3条记录(但这并没有发生-它插入了3条具有相同标识的记录,即最后一个范围标识) 我需要写一个循环还是需要创建一个触发器 请给我一个解决方案,我从过去的4个小时绞尽脑汁 感谢anvance,您可以使用OUTPUT子句从任意数量的插入中获取标识 create table table1(ID INT identity(1,1),Name varchar(50)) insert into table1 values('Ram'),('Sitha'),(

它应该得到这三个标识,并且应该在表3中插入3条记录(但这并没有发生-它插入了3条具有相同标识的记录,即最后一个范围标识)

我需要写一个循环还是需要创建一个触发器

请给我一个解决方案,我从过去的4个小时绞尽脑汁


感谢anvance,您可以使用OUTPUT子句从任意数量的插入中获取标识

 create table table1(ID INT identity(1,1),Name varchar(50))
    insert into table1 values('Ram'),('Sitha'),('Laxman')
    create table table1(ID INT identity(1,1),Name varchar(50))
    create table table3(ID INT ,Name varchar(50))

    insert into table2(Name)
    select Name from table1
        declare @id int;
        set @id= (select scope_Identity())
    begin
    insert into table3(ID,Name)
    select @id,Name from table2
    end

    select * from table2
    select * from table3

使用OUTPUT子句处理多行插入:

create table table1(ID INT identity(1,1),Name varchar(50))
DECLARE @T1 Table (ID int, name varchar(50))
insert into table1 
    OUTPUT inserted.ID, Inserted.Name INTO @T1
    values('Ram'),('Sitha'),('Laxman')
声明@IdentityId INT,@Count INT=1
将@temp声明为表(Id INT IDENTITY,Name NVARCHAR(100))
插入@temp(名称)
从表1中选择名称

而@Count你想要多少张桌子,2张还是3张?您能更正上面的代码吗?另外,您想要1 INSERT(OUTPUT子句就足够了)或任何INSERT(您想要触发器)的解决方案吗?我尝试了下面的解决方案,但出现以下错误:OUTPUT INTO子句的目标表“table2”不能位于(主键、外键)关系的任何一侧。找到引用约束“FK_table2_ID”。我只是想插入,如果触发是必要的,那么我们会去做吗?非常感谢丹·古兹曼。。。。。。但我犯了以下错误!OUTPUT INTO子句的目标表“table2”不能位于(主键、外键)关系的任一侧。找到引用约束“FK_table2_ID”。@Balaji Gollapalli-错误告诉您出了什么问题:输出…INTO子句的目标不能具有FK关系。编写的sql没有问题,您只需要针对不同的表。@Balaji Gollapalli,对于具有外键约束的表,您可以声明一个与表3具有相同结构的本地表变量,并在
OUTPUT
子句中指定它。然后使用INSERT…SELECT从table变量插入table3。OUTPUT into子句的目标表“table2”不能位于(主键、外键)关系的任一侧。找到引用约束“FK_table2_ID”。将输出到表变量中,然后处理表变量中的数据。
create table table1(ID INT identity(1,1),Name varchar(50))
DECLARE @T1 Table (ID int, name varchar(50))
insert into table1 
    OUTPUT inserted.ID, Inserted.Name INTO @T1
    values('Ram'),('Sitha'),('Laxman')
INSERT INTO dbo.table2(Name)
OUTPUT inserted.ID, inserted.Name INTO table3
SELECT Name FROM dbo.table1;
DECLARE @IdentityId INT,@Count INT=1
    DECLARE  @temp AS TABLE (Id INT IDENTITY ,Name NVARCHAR(100))

   INSERT INTO @temp(Name)
   SELECT Name FROM table1

   WHILE @Count <=(SELECT COUNT(SId) FROM @temp)
   BEGIN
     INSERT INTO table2(Name)
    SELECT Name FROM @temp
        WHERE Id=@Count

        SET @IdentityId  = SCOPE_IDENTITY()

        INSERT INTO tabel3(@IdentityId,Name)
        SELECT 3, @IdentityId,1,GETDATE() 
        SET @Count=@Count+1
   END