私の仕事は、ストアドプロシージャを使用して企業情報を複製することです。私は技術的なリードから注文として私の仕事を完了するためにカーソルを使用する必要があります。私はSPを実行するたびにこのエラーが発生します。私の前の質問で言及した人、住所などの他のテーブルは解決されました。今残っているのは電話&私に頭痛を与えている電話リンクテーブルです。INSERTステートメントがFOREIGN KEY制約(Cursor)と競合しました
P/S:
- 実体識別子= 5(社)以下
私のコードです:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[DuplicateCompanyInfo]
@Comp_CompanyId NVARCHAR(80)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @CompanyID NVARCHAR(30),
@PersonID NVARCHAR(30),
@AddressID NVARCHAR(30),
@PhoneLinkID NVARCHAR(30),
@PhoneID NVARCHAR(30)
EXEC @companyId = crm_next_id 5
EXEC @PersonId = crm_next_id 13
EXEC @AddressId = crm_next_id 1
-- Add Company
INSERT INTO Company
(
Comp_CompanyId, Comp_PrimaryPersonId, Comp_PrimaryAddressId, Comp_Name, Comp_Type, Comp_Status, Comp_CreatedBy,
Comp_CreatedDate, Comp_UpdatedBy, Comp_UpdatedDate, Comp_TimeStamp, Comp_SecTerr, Comp_WebSite
)
SELECT @companyId, @PersonId, @AddressId, Comp_Name, Comp_Type, Comp_Status, '1',
GETDATE(), '1', GETDATE(), GETDATE(), Comp_SecTerr, Comp_WebSite
FROM Company
WHERE Comp_CompanyId = @comp_companyid
AND Comp_Deleted is null
------- Company PhoneLink (Business) Cursor -----------------------------------------
-- Declare Variables
DECLARE @c_PLink_LinkID NVARCHAR(30)
DECLARE @c_PLink_PhoneId NVARCHAR(30)
DECLARE @c_PLink_CreatedBy NVARCHAR(30)
DECLARE @c_PLink_CreatedDate NVARCHAR(30)
DECLARE @c_PLink_UpdatedDate NVARCHAR(30)
DECLARE @c_PLink_TimeStamp NVARCHAR(30)
DECLARE @c_PLink_EntityID NVARCHAR(30)
DECLARE @c_PLink_RecordID NVARCHAR(30)
DECLARE @c_PLink_Type NVARCHAR(30)
--Declare Cursor
DECLARE CompPhoneLinkCursor CURSOR FOR
SELECT PLink_LinkID, PLink_PhoneId, PLink_CreatedBy, PLink_CreatedDate, PLink_UpdatedDate, PLink_TimeStamp,
PLink_EntityID, PLink_RecordID, PLink_Type
FROM PhoneLink
INNER JOIN Phone
ON PLink_PhoneId = Phon_PhoneId
AND PLink_RecordID = @Comp_CompanyId
AND Plink_EntityID = '5'
AND Plink_Type = 'Business'
AND Phon_Deleted is null
AND Plink_Deleted is null
--Open Cursor & fetch 1st row into variables
OPEN CompPhoneLinkCursor
FETCH NEXT FROM CompPhoneLinkCursor INTO @c_PLink_LinkID, @c_PLink_PhoneId, @c_PLink_CreatedBy, @c_PLink_CreatedDate,
@c_PLink_UpdatedDate, @c_PLink_TimeStamp, @c_PLink_EntityID, @c_PLink_RecordID, @c_PLink_Type
--Fetch successful
--Check for a new row
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC @PhoneLinkID = crm_next_id 10208
EXEC @PhoneId = crm_next_id 14
INSERT INTO PhoneLink
(
PLink_LinkID, PLink_PhoneId, PLink_CreatedBy, PLink_CreatedDate, PLink_UpdatedDate,
PLink_TimeStamp, PLink_EntityID, PLink_RecordID, PLink_Type
)
VALUES
(
@PhoneLinkID, @PhoneId, '1', GETDATE(), GETDATE(),
GETDATE(), @c_PLink_EntityID, @c_PLink_RecordID, 'Business'
)
--Get next available row into variables
FETCH NEXT FROM CompPhoneLinkCursor INTO @c_PLink_LinkID, @c_PLink_PhoneID, @c_PLink_CreatedBy, @c_PLink_CreatedDate,
@c_PLink_UpdatedDate, @c_PLink_TimeStamp, @c_PLink_EntityID, @c_PLink_RecordID, @c_PLink_Type
END
CLOSE CompPhoneLinkCursor
DEALLOCATE CompPhoneLinkCursor
------- Company Phone (Business) Cursor ---------------------------------------------
-- Declare Variables
DECLARE @c_Phon_PhoneId NVARCHAR(30)
DECLARE @c_Phon_Number NVARCHAR(30)
DECLARE @c_Phon_CreatedBy NVARCHAR(30)
DECLARE @c_Phon_CreatedDate NVARCHAR(30)
DECLARE @c_Phon_UpdatedBy NVARCHAR(30)
DECLARE @c_Phon_UpdatedDate NVARCHAR(30)
DECLARE @c_Phon_TimeStamp NVARCHAR(30)
--Declare Cursor
DECLARE CompPhoneCursor CURSOR FOR
SELECT Phon_PhoneId, Phon_Number, Phon_CreatedBy, Phon_CreatedDate, Phon_UpdatedBy, Phon_UpdatedDate, Phon_TimeStamp
FROM Phone
INNER JOIN PhoneLink
ON Phon_PhoneId = PLink_PhoneId
AND PLink_RecordID = @Comp_CompanyId
AND Plink_EntityID = '5'
AND Plink_Type = 'Business'
AND Phon_Deleted is null
AND Plink_Deleted is null
--Open Cursor & fetch 1st row into variables
OPEN CompPhoneCursor
FETCH NEXT FROM CompPhoneCursor INTO @c_Phon_PhoneId, @c_Phon_Number, @c_Phon_CreatedBy, @c_Phon_CreatedDate,
@c_Phon_UpdatedBy, @c_Phon_UpdatedDate, @c_Phon_TimeStamp
--Fetch successful
--Check for a new row
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO Phone
(
Phon_PhoneId, Phon_Number, Phon_CreatedBy, Phon_CreatedDate, Phon_UpdatedBy, Phon_UpdatedDate, Phon_TimeStamp
)
VALUES
(
@PhoneID, @c_Phon_Number, '1', GETDATE(), '1', GETDATE(), GETDATE()
)
--Get next available row into variables
FETCH NEXT FROM CompPhoneCursor INTO @c_Phon_PhoneId, @c_Phon_Number, @c_Phon_CreatedBy, @c_Phon_CreatedDate,
@c_Phon_UpdatedBy, @c_Phon_UpdatedDate, @c_Phon_TimeStamp
END
CLOSE CompPhoneCursor
DEALLOCATE CompPhoneCursor
------- Company PhoneLink (Fax) Cursor ----------------------------------------------
-- Declare Variables
DECLARE @cf_PLink_LinkID NVARCHAR(30)
DECLARE @cf_PLink_PhoneId NVARCHAR(30)
DECLARE @cf_PLink_CreatedBy NVARCHAR(30)
DECLARE @cf_PLink_CreatedDate NVARCHAR(30)
DECLARE @cf_PLink_UpdatedDate NVARCHAR(30)
DECLARE @cf_PLink_TimeStamp NVARCHAR(30)
DECLARE @cf_PLink_EntityID NVARCHAR(30)
DECLARE @cf_PLink_RecordID NVARCHAR(30)
DECLARE @cf_PLink_Type NVARCHAR(30)
--Declare Cursor
DECLARE CompanyFaxLinkCursor CURSOR FOR
SELECT PLink_LinkID, PLink_PhoneId, PLink_CreatedBy, PLink_CreatedDate, PLink_UpdatedDate, PLink_TimeStamp,
PLink_EntityID, PLink_RecordID, PLink_Type
FROM PhoneLink
INNER JOIN Phone
ON PLink_PhoneId = Phon_PhoneId
AND PLink_RecordID = @Comp_CompanyId
AND Plink_EntityID = '5'
AND Plink_Type = 'Fax'
AND Plink_Deleted is null
AND Phon_Deleted is null
--Open Cursor & fetch 1st row into variables
OPEN CompanyFaxLinkCursor
FETCH NEXT FROM CompanyFaxLinkCursor INTO @cf_PLink_LinkID, @cf_PLink_PhoneId, @cf_PLink_CreatedBy, @cf_PLink_CreatedDate,
@cf_PLink_UpdatedDate, @cf_PLink_TimeStamp, @cf_PLink_EntityID, @cf_PLink_RecordID, @cf_PLink_Type
--Fetch successful
--Check for a new row
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC @PhoneLinkID = crm_next_id 10208
EXEC @PhoneId = crm_next_id 14
INSERT INTO PhoneLink
(
PLink_LinkID, PLink_PhoneId, PLink_CreatedBy, PLink_CreatedDate, PLink_UpdatedDate,
PLink_TimeStamp, PLink_EntityID, PLink_RecordID, PLink_Type
)
VALUES
(
@PhoneLinkID, @PhoneId, '1', GETDATE(), GETDATE(),
GETDATE(), @cf_PLink_EntityID, @cf_PLink_RecordID, 'Fax'
)
--Get next available row into variables
FETCH NEXT FROM CompanyFaxLinkCursor INTO @cf_PLink_LinkID, @cf_PLink_PhoneID, @cf_PLink_CreatedBy, @cf_PLink_CreatedDate,
@cf_PLink_UpdatedDate, @cf_PLink_TimeStamp, @cf_PLink_EntityID, @cf_PLink_RecordID, @cf_PLink_Type
END
CLOSE CompanyFaxLinkCursor
DEALLOCATE CompanyFaxLinkCursor
------- Company Phone (Fax) Cursor --------------------------------------------------
-- Declare Variables
DECLARE @cf_Phon_PhoneId NVARCHAR(30)
DECLARE @cf_Phon_Number NVARCHAR(30)
DECLARE @cf_Phon_CreatedBy NVARCHAR(30)
DECLARE @cf_Phon_CreatedDate NVARCHAR(30)
DECLARE @cf_Phon_UpdatedBy NVARCHAR(30)
DECLARE @cf_Phon_UpdatedDate NVARCHAR(30)
DECLARE @cf_Phon_TimeStamp NVARCHAR(30)
--Declare Cursor
DECLARE CompanyFaxCursor CURSOR FOR
SELECT Phon_PhoneId, Phon_Number, Phon_CreatedBy, Phon_CreatedDate, Phon_UpdatedBy, Phon_UpdatedDate, Phon_TimeStamp
FROM Phone
INNER JOIN PhoneLink
ON Phon_PhoneId = PLink_PhoneId
AND PLink_RecordID = @Comp_CompanyId
AND Plink_EntityID = '5'
AND Plink_Type = 'Fax'
AND Plink_Deleted is null
AND Phon_Deleted is null
--Open Cursor & fetch 1st row into variables
OPEN CompanyFaxCursor
FETCH NEXT FROM CompanyFaxCursor INTO @cf_Phon_PhoneId, @cf_Phon_Number, @cf_Phon_CreatedBy, @cf_Phon_CreatedDate,
@cf_Phon_UpdatedBy, @cf_Phon_UpdatedDate, @cf_Phon_TimeStamp
--Fetch successful
--Check for a new row
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO Phone
(
Phon_PhoneId, Phon_Number, Phon_CreatedBy, Phon_CreatedDate, Phon_UpdatedBy, Phon_UpdatedDate, Phon_TimeStamp
)
VALUES
(
@PhoneID, @cf_Phon_Number, '1', GETDATE(), '1', GETDATE(), GETDATE()
)
--Get next available row into variables
FETCH NEXT FROM CompanyFaxCursor INTO @cf_Phon_PhoneId, @cf_Phon_Number, @cf_Phon_CreatedBy, @cf_Phon_CreatedDate,
@cf_Phon_UpdatedBy, @cf_Phon_UpdatedDate, @cf_Phon_TimeStamp
END
CLOSE CompanyFaxCursor
DEALLOCATE CompanyFaxCursor
私のテーブル構造は以下の通りです:
電話リンクテーブル:
PLink_LinkID | PLink_EntityID | PLink_RecordID | PLink_Type | PLink_PhoneID
-------------------------------------------------------------------------
1 | 5 | 2 | Business | 1
2 | 5 | 3 | Fax | 2
3 | 5 | 2 | Fax | 3
4 | 5 | 3 | Business | 4
電話表:私はエラーを以下に示してしまいます。このストアドプロシージャを実行するたびに今
3210。私は最初の企業へのリンクだけを携帯電話に挿入するために、そのPhoneLink
テーブルですべてのPhone
テーブルを交換しようとしましたが、私はまだ、次のエラーを二回繰り返しました:
メッセージ547、レベル16、状態0、プロシージャDuplicateCompanyInfo 、Line 150(Assumed)
INSERTステートメントがFOREIGN KEY制約 "FK_PhoneLink_PhoneId"と競合しました。競合は、データベース "CRM"、テーブル "dbo.Phone"、列 "Phon_PhoneId"で発生しました。
メッセージ547、レベル16、状態0、プロシージャDuplicateCompanyInfo、ライン160(想定)
FOREIGN KEY制約 "FK_PhoneLink_PhoneId" と競合INSERT文。競合は、データベース "CRM"、テーブル "dbo.Phone"、列 "Phon_PhoneId"で発生しました。
非常に単純なエラーメッセージですが、修正できません。私はSQLで新しいです。助けてください!
[mcve]の作成方法をお読みください。あなたは多くのコードを投稿しました。質問に関連するコードだけに注目してください。 –
申し訳ありません、私は 'Person_Phone'を削除して編集して短縮し、' Company Phone'だけ残しました、それは大丈夫ですか? –
私はあなたに私のために頼んでいない、私はあなたのために頼んでいる。あなたの質問はより短く、より明確に、より速く、より正確な回答を得る良い機会になります。私は、たとえば、あなたのものと同じくらい長い質問を読んでも大したことはありません。私は唯一の人ではないと確信しています。私たちは余裕をもってすべてここにいることを覚えておいてください。誰も、stackoverflowの質問に答えるための支払いを受けていません。できるだけ短く、集中的に、そして判読可能な形でご質問をお待ちしております。 –