2016-09-19 6 views
-1

別のテーブル(ApplicationTasks)へのINSERTをしながら、私は次のエラーを取得していますと競合INSERT文:このFKとFOREIGN KEY制約

FOREIGN KEY制約 「FK_ApplicationTasks_Application__ApplicationIdと競合INSERT文"競合 がデータベース "Status"、テーブル "dbo.Application"、列 'ApplicationId'で発生しました。

これは常に発生しますが、まだレコードはApplicationTasksテーブルに挿入されています。インサートは1秒に何回も行うことができます。私は、これを引き起こすブロッキング\ロッキングがあるとは思わなかった。それが参照するApplicationIdは既にApplicationテーブルに存在します。

私にこれを修正するような考えがありますか?

編集:

アプリケーション表:

SELECT [ApplicationId] 
    ,[ApplicationName] 
    FROM [Status].[dbo].[Application] 
    WHERE ApplicationId = 498 

結果:

ApplicationId ApplicationName 

498    Tst ESB PowerEnterprise.PO.MG 
私は私のポストにまだ写真を追加することはできませんので、ここで私は、クエリ\データのためにできる最善の方法です

ApplicationTasks表:

SELECT TOP 10 [TaskId] 
    ,[Task] 
    ,[ApplicationId] 
    ,[RunTime] 
    FROM [Status].[dbo].[ApplicationTasks] 
    WHERE ApplicationId = 498 

結果:あなたが見ることができるように

TaskId  Task  ApplicationId RunTime 
769893930 Dummy Task 498    2016-04-25 07:45:21.080 
769894958 Dummy Task 498    2016-04-25 08:30:10.857 
769895327 Dummy Task 498    2016-04-25 08:45:15.517 
769895328 Dummy Task 498    2016-04-25 08:45:16.063 
769896677 Dummy Task 498    2016-04-25 09:45:13.427 
769896678 Dummy Task 498    2016-04-25 09:45:13.473 
769897019 Dummy Task 498    2016-04-25 10:00:17.103 
769897020 Dummy Task 498    2016-04-25 10:00:17.743 
769897356 Dummy Task 498    2016-04-25 10:15:19.423 
769897703 Dummy Task 498    2016-04-25 10:30:13.023 

、498のAPPLICATIONIDは、アプリケーションテーブルであり、このAPPLICATIONIDためApplcationTasksテーブルに挿入されたレコードがあります。しかし、それでもこのエラーはスローされます。それは頻繁に実行されるためかもしれませんか?再び

編集:ApplicationTasks

ALTER TABLE [dbo].[ApplicationTasks] WITH CHECK ADD CONSTRAINT [FK_ApplicationTasks_Application__ApplicationId] FOREIGN KEY([ApplicationId]) 
REFERENCES [dbo].[Application] ([ApplicationId]) 
ON DELETE CASCADE 
GO 

ALTER TABLE [dbo].[ApplicationTasks] CHECK CONSTRAINT [FK_ApplicationTasks_Application__ApplicationId] 
GO 

FK PROCがコードによって呼び出されるストアド:定期を失敗し

ALTER Procedure [dbo].[sp_applicationtasks_insert](
@applicationkey INT, 
    @task VARCHAR(40), 
    @userid VARCHAR(40), 
    @runtime DATETIME, 
    @taskstatus VARCHAR(20), 
    @detail VARCHAR(500), 
    @applicationstate VARCHAR(20), 
    @host VARCHAR(40) 
) 
AS 

BEGIN 

    BEGIN TRANSACTION 

INSERT INTO [applicationtasks] 
(
    [ApplicationId], 
    [Task], 
    [UserId], 
    [RunTime], 
    [Status], 
    [Detail], 
    [ApplicationState], 
    [Host] 
) VALUES (
    @applicationkey, 
    @task, 
    @userid, 
    @runtime, 
    @taskstatus, 
    @detail, 
    @applicationstate, 
    @host  
) 
    COMMIT TRANSACTION 

    RETURN @@Identity 
END 

記述例:

EXECUTE @RC = [dbo].[sp_applicationtasks_insert] 
    @applicationkey = 498 
    ,@task = "Dummy Task" 
    ,@userid = '' 
    ,@runtime = getdate() 
    ,@taskstatus = '' 
    ,@detail = '' 
    ,@applicationstate = '' 
    ,@host = 'SERVERNAME' 
+2

親レコードが存在しない子レコードを挿入しようとしました。それは基本的にそれです。しかし、サンプルクエリ/データのような有用な詳細を提供していないので、それはちょうど推測です。 –

+0

私はうまくいけば、より多くの情報で投稿を編集しました。 – WadeU

+0

ただし、関連するフィールドやFKのテーブル定義は非常に便利です。 –

答えて

0

クエリに、ApplicationTasksテーブルに存在しないapplicationidを挿入しようとしています。

例:あなたのdbo.Applicationテーブルを想定し

は、次のデータがあります。

applicationid - description - data 
    1  - test   - 09192016 
    2  - test2  - 09192016 
    3  - test3  - 09192016 

あなたはApplicationTasksテーブルに4以上に挿入しAPPLICATIONIDしようとした場合、あなたはこのエラーを取得しますあなたが関係を壊したからです。

+0

それは問題ですが、私がApplicationTasksに挿入しようとしているapplicationidはApplicationテーブルに存在しています。それは混乱する部分です。 – WadeU

+0

あなたのデータベースの詳細を投稿できますか?その関係の詳細、挿入されるデータなど – Stormhashe

+0

投稿を編集しました。 – WadeU

関連する問題