使用存储过程插入时,外键为空

时间:2011-12-05 15:04:25

标签: sql

我已经创建了一个带有两个表的插入存储过程,如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(外键)具有空值

我做错了什么?

3 个答案:

答案 0 :(得分:1)

我猜这是基于IDENTITY列的SQL Server。正确的吗?

第一个插入创建一个用户,但在插入该爱好时没有设置用户ID。您需要从第一个插入中捕获标识值,以便在第二个插入中使用。你有没有可用的系统功能?

答案 1 :(得分:1)

您应该提供要插入Assignment3_NameAge的{​​{1}}值的键。

如果您想要最后插入,可以使用SQL Server中的Assignment3_Hobbies(如果您使用的是SQL Server)或等效的。它将为您提供SCOPE_IDENTITY()

中最后插入的值

答案 2 :(得分:1)

您没有为它提供值,即使您已创建外键关系,SQL也不会自动为您填写值。填充表格是你的工作。