別のテーブル(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'
親レコードが存在しない子レコードを挿入しようとしました。それは基本的にそれです。しかし、サンプルクエリ/データのような有用な詳細を提供していないので、それはちょうど推測です。 –
私はうまくいけば、より多くの情報で投稿を編集しました。 – WadeU
ただし、関連するフィールドやFKのテーブル定義は非常に便利です。 –