我已经创建了一个带有两个表的插入存储过程,如exapmle:
Table NameAge
CREATE TABLE [dbo].[Assignment3_NameAge]
(
userID int PRIMARY KEY IDENTITY(1,1),
Name varchar(255) NOT NULL,
Age int NOT NULL
)
表爱好
CREATE TABLE [dbo].[Assignment3_Hobbies]
(
hobbiesID int Identity(1,1) Primary Key,
userID int Foreign Key references Assignment3_NameAge(userID),
hobbies varchar(255) NOT NULL,
)
插入存储过程
CREATE PROCEDURE [dbo].p_Assignment3Join_ins
@Name nvarchar(100),
@Age int,
@Hobbies nvarchar(100)
AS
INSERT INTO [TABLE].[dbo].[Assignment3_NameAge]
([Name]
,[Age])
VALUES (@Name,@Age)
INSERT INTO [TABLE].[dbo].[Assignment3_Hobbies]
([Hobbies])
VALUES (@Hobbies)
问题是,当我运行存储过程时,表Hobbies对于userid(外键)具有空值
我做错了什么?
答案 0 :(得分:1)
我猜这是基于IDENTITY列的SQL Server。正确的吗?
第一个插入创建一个用户,但在插入该爱好时没有设置用户ID。您需要从第一个插入中捕获标识值,以便在第二个插入中使用。你有没有可用的系统功能?
答案 1 :(得分:1)
您应该提供要插入Assignment3_NameAge
的{{1}}值的键。
如果您想要最后插入,可以使用SQL Server中的Assignment3_Hobbies
(如果您使用的是SQL Server)或等效的。它将为您提供SCOPE_IDENTITY()
答案 2 :(得分:1)
您没有为它提供值,即使您已创建外键关系,SQL也不会自动为您填写值。填充表格是你的工作。