0

我有 3 张桌子UniversityRegSupporterReg& Login。如果大学或支持者在系统中注册,则一般详细信息会显示在他们的表格中,登录详细信息会显示在Login表格中。在这里我使用scope_identity.

当我保存支持者注册详细信息时出现错误。

错误

消息 515,第 16 级,状态 2,过程 SupporterReg_SP,第 16
行 列不允许空值。插入失败。

消息 515,级别 16,状态 2,Procedure SupporterReg_SP,第 20
行 列不允许空值。插入失败。

UniversityReg SP

ALTER PROCEDURE [dbo].[UniversityReg_SP]
  (
@Username varchar(50),
@Password varchar(50),
@UniversityName varchar(50) ,
@GovernmentRegNo varchar(50) ,
@Country varchar(50) ,
@CreatedBy varchar(50)

    )
AS
DECLARE @LoginID int
INSERT INTO UniversityReg   (UniversityName,GovernmentRegNo,Country,CreatedBy,ShortCode)values(@UniversityName,@GovernmentRegNo,@Country,@CreatedBy,'UNI')

SET @LoginID = SCOPE_IDENTITY();

INSERT INTO Login values(@LoginID,@Username,@Password,'UNI')

RETURN

支持者Reg_SP

CREATE PROCEDURE [dbo].[SupporterReg_SP]
   (
@UserName varchar(50),
@Password varchar(50),
@SupporterName varchar(50),
@University varchar(50) ,
@ContactNo varchar(50),
@Email varchar(50),
@StudentLocation varchar(50) 


       )

          AS
       DECLARE @LoginID int
        INSERT INTO   SupporterReg(SupporterName,University,ContactNo,Email,StudentLocation,ImagePath,ShortCode)V   alues(@SupporterName,@University,@ContactNo,@Email,@StudentLocation,'','SUP')

SET @LoginID = SCOPE_IDENTITY();

INSERT INTO Login values(@LoginID,@UserName,@Password,'SUP')

RETURN

大学注册表

[UniversityId] [int] IDENTITY(1,1) NOT NULL,
[Username] [varchar](50) NULL,
[Password] [varchar](50) NULL,
[UniversityName] [varchar](50) NULL,
[GovernmentRegNo] [varchar](50) NULL,
[Country] [varchar](50) NULL,
[CreatedBy] [varchar](50) NULL,
[ShortCode] [varchar](50) NULL,

登录表

[LoginID] [int] NOT NULL,
[UserName] [nvarchar](50) NOT NULL,
[Password] [nvarchar](50) NOT NULL,
[ShortCode] [nvarchar](50) NULL

SupporterReg 表

[SupporterId] [int] NOT NULL,
[SupporterName] [varchar](50) NULL,
[University] [varchar](50) NULL,
[ContactNo] [varchar](50) NULL,
[Email] [varchar](50) NULL,
[StudentLocation] [varchar](50) NULL,
[ImagePath] [varchar](50) NULL,
[ShortCode] [varchar](50) NULL,
4

3 回答 3

0

您的问题是您的过程试图将多个值插入 SupporterReg 表,但是您没有包含 SupporterID 列的值,该列已定义为 NOT NULL。

您可以将值与插入语句一起传递,或者调整表 DDL 使其成为 IDENTITY 列并为您填充该数据。

于 2012-09-14T18:11:24.387 回答
0

你的设计是错误的。您不应该使用登录表中两个不同表中的 ID 作为登录 ID。这是一个在实践中无法工作的模型,因为两个表迟早会具有相同的 id,而您将不知道登录与哪个表相关。您的父子关系颠倒了。

正确的设计是先插入登录,使登录ID成为身份。然后插入到 UniversityReg 或 SupporterReg 的子表中。当您这样做时,您可以获得 FK 和参照完整性。

于 2012-09-14T20:45:28.937 回答
0

在您的存储过程@LoginID中是 SupporterReg 或 UniversityReg 的 ID,而不是 Login

在登录中,您的 LoginID 列应定义为int identity(1,1),并且您应在插入中指定列名

INSERT INTO Login (column, names, go here)
values(@LoginID,@UserName,@Password,'SUP') 
于 2012-09-14T18:03:17.030 回答