0

私は3つのテーブルUniversityRegSupporterReg&を持っていLoginます。大学またはサポーターがシステムに登録すると、常に一般的な詳細がテーブルに送られ、ログインの詳細がLoginテーブルに送られます。ここでは を使用しますscope_identity

サポーター登録の詳細を保存しようとするとエラーが発生します。

エラー

メッセージ 515、レベル 16、状態 2、手順 SupporterReg_SP、行 16
値 NULL を列 'SupporterId'、テーブル 'CounsellingDB.dbo.SupporterReg' に挿入できません。列はヌルを許可しません。INSERT は失敗します。

メッセージ 515、レベル 16、状態 2、手順 SupporterReg_SP、行 20
値 NULL を列 'LoginID'、テーブル 'CounsellingDB.dbo.Login' に挿入できません。列はヌルを許可しません。INSERT は失敗します。

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

SupporterReg_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

あなたのデザインは間違っています。ログインテーブル内の2つの異なるテーブルのIDをloginidとして使用しないでください。これは、両方のテーブルが遅かれ早かれ同じIDを持ち、ログインがどちらに関連しているかわからないため、実際には機能しないモデルです。親子関係が逆転しています。

正しい設計は、最初にログインに挿入して、loginidをIDにすることです。次に、UniversityRegまたはSupporterRegのいずれかの子テーブルに挿入します。これを行うと、FKと参照整合性を得ることができます。

于 2012-09-14T20:45:28.937 に答える
0

ストアド プロシージャ@LoginIDには、Login ではなく、SupporterReg または UniversityReg の ID があります。

ログインでは、LoginID 列を次のように定義int identity(1,1)する必要があり、挿入で列名を指定する必要があります。

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

問題は、手順が SupporterReg テーブルに複数の値を挿入しようとしているのに、NOT NULL と定義されている SupporterID 列の値を含めていないことです。

そのinsertステートメントと一緒に値を渡すか、テーブルDDLを調整してIDENTITY列にしてそのデータを埋めることができます。

于 2012-09-14T18:11:24.387 に答える