SQL Serverストアドプロシージャでカスケード挿入を実行しています。次に、最初のテーブル挿入のIDからSCOPE_IDENTITY
を2番目のテーブルに渡します。カスケードインサートでnull Scope_Indentityを解決するにはどうすればよいですか?
しかし、ストアドプロシージャの実行中に、私はSCOPE_IDENTITY
のためのNULL値を取得する:
メッセージ515、レベル16、状態2、手順InsertDDM_UserProfile、ライン43
は列「フィルターにNULL値を挿入することはできません'、テーブル' ..... dbo.DDM_Dashboard ';列はNULLを許可しません。 INSERTは失敗します。
質問:なぜストアドプロシージャがSCOPE_IDENTITY
を使用してヌルIDを返すのですか?
これは私が作成したストアドプロシージャです。 FK制約はすでにテーブル用に設定されています:
ALTER PROCEDURE [dbo].[InsertDDM_UserProfile]
@p_email VARCHAR(100),
@p_dashboardName VARCHAR(100),
AS
BEGIN
INSERT INTO [dbo].[DDM_User] ([Email])
VALUES (@p_email)
INSERT INTO [dbo].[DDM_Dashboard] ([Dashboard_Name], [DDM_USER_ID])
VALUES (@p_dashboardName, SCOPE_IDENTITY())
END
そして以下は、二つのテーブルの構造です:
DDM_User-
CREATE TABLE [dbo].[DDM_User]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Email] [varchar](80) NOT NULL,
CONSTRAINT [PK_DDMUser]
PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
DDM_Dashboard:
CREATE TABLE [dbo].[DDM_Dashboard]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Dashboard_Name] [varchar](100) NOT NULL,
[DDM_USER_ID] [int] NOT NULL,
CONSTRAINT [PK_DDMDashboard]
PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[DDM_Dashboard] WITH NOCHECK
ADD CONSTRAINT [FK_DDMDashboard_DDMUser]
FOREIGN KEY([DDM_USER_ID]) REFERENCES [dbo].[DDM_User] ([ID])
GO
ALTER TABLE [dbo].[DDM_Dashboard] CHECK CONSTRAINT [FK_DDMDashboard_DDMUser]
GO
両方のテーブルのテーブルスキーマを確認できますか? DDM_DashboardのFilter列はNullを許可しておらず、insert文にはありません。 –
確かに私はそれを投稿します。 –