【问题标题】:How to insert values into two SQL Server tables updating primary key and foreign key simultaneously, using a procedure?如何使用过程将值插入同时更新主键和外键的两个 SQL Server 表中?
【发布时间】:2021-06-04 09:23:43
【问题描述】:

我有这样的事情:

CREATE TABLE [dbo].[table1] 
(
    [id1] [int] IDENTITY(1,1) NOT NULL,
    [data] [varchar](255) NOT NULL,
    CONSTRAINT [PK_table1] PRIMARY KEY(id1) 
)

CREATE TABLE [dbo].[table2] 
(
    [id2] [int] IDENTITY(1,1) NOT NULL,
    [id1] [int] ,
    
    CONSTRAINT [PK_table2] PRIMARY KEY (id2)
    CONSTRAINT [FK_table2] FOREIGN KEY(id1) REFERENCES Table1
)

我想使用一个过程将值添加到两个表中。我没有添加任何键值,只是数据值。

如果我使用INSERT INTO 将数据添加到表 1 中,它的主键将自动递增。我还将在相同的过程中增加表 2。

我希望当我运行该过程时,表 1 的自动递增主键应自动更新为表 2 中的外键。

【问题讨论】:

    标签: sql-server foreign-keys primary-key


    【解决方案1】:

    你需要做这样的事情:

    CREATE PROCEDURE dbo.InsertData (@data VARCHAR(255))
    AS
    BEGIN
        -- Insert row into table1
        INSERT INTO dbo.Table1 (data) VALUES (@data);
        
        -- Capture the newly generated "Id1" value
        DECLARE @NewId1 INT;
        SELECT @NewId1 = SCOPE_IDENTITY();
        
        -- Insert data into table2
        INSERT INTO dbo.table2 (Id1) VALUES (@NewId1);
    END
    

    【讨论】:

      【解决方案2】:

      我不知道我是否明白你想做什么,但我认为你可以这样做:

      INSERT INTO table1 (data) VALUES 'mydata'
      DECLARE @LastKey INT
      SET @LastKey = SCOPE_IDENTITY() -- FOR SQL SERVER, OR LAST_INSERT_ID() FOR MYSQL
      INSERT INTO table2 (data) VALUES @LastKey
      

      【讨论】:

      • 您需要将插入的值放入括号中 - 像这样:VALUES ('mydata')
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多