如何使用过程将值插入到两个 SQL 服务器表中同时更新主键和外键?
How to insert values into two SQL Server tables updating primary key and foreign key simultaneously, using a procedure?
我有这样的东西:
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
向Table1中添加数据,它的主键将自动递增。我还将在相同的过程中递增 Table 2。
我希望 Table 1 的自动递增主键在 运行 该程序时应自动更新为 Table 2 中的外键。
你需要做这样的事情:
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
我不知道我是否明白你想做什么,但我认为你可以这样做:
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
我有这样的东西:
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
向Table1中添加数据,它的主键将自动递增。我还将在相同的过程中递增 Table 2。
我希望 Table 1 的自动递增主键在 运行 该程序时应自动更新为 Table 2 中的外键。
你需要做这样的事情:
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
我不知道我是否明白你想做什么,但我认为你可以这样做:
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