0

メインテーブルは次のとおりです。

CREATE TABLE [dbo].[Control_cReport](
    [ReportKey] [int] IDENTITY(10000,1) NOT NULL,
    [ReportTechKey] [int] NOT NULL,
    [ProcessKey] [int] NULL,
 CONSTRAINT [PK_Control_cReport] PRIMARY KEY CLUSTERED 
(
    [ReportKey] 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].[Control_cReport]  WITH CHECK ADD CONSTRAINT [FK_Control_cReport_cReportTech] FOREIGN KEY([ReportTechKey])
REFERENCES [dbo].[Control_cReportTech] ([ReportTechKey])
GO

ALTER TABLE [dbo].[Control_cReport] CHECK CONSTRAINT [FK_Control_cReport_cReportTech]
GO

ALTER TABLE [dbo].[Control_cReport] ADD  DEFAULT ((12)) FOR [ProcessKey]
GO

セカンダリ テーブルは次のとおりです。

CREATE TABLE [dbo].[Control_cReportTech](
    [ReportTechKey] [int] NOT NULL,
    [ReportTechDescription] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK__Control_cReportTech] PRIMARY KEY CLUSTERED 
(
    [ReportTechKey] 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

次に、セカンダリ テーブルに追加しました。

INSERT INTO [WHAnalysis].[dbo].Control_cReportTech  
VALUES  
    (1,'Excel Macros'),
    (2,'VB Script'),
    (3,'PDF'),
    (4,'Batch')

今、私はINSERTこれを介して古いテーブルからメインテーブルにデータを取り込もうとしています:

INSERT INTO [WHAnalysis].[dbo].[Control_cReport]
SELECT
    [ProcessKey] = 12,
    [ReportTechKey] = 1
FROM WHAnalysis.dbo.Controltb_ReportingScheduler_jq

次のエラーが表示されます。

メッセージ 547、レベル 16、状態 0、行 1 INSERT ステートメントは、FOREIGN KEY 制約 "FK_Control_cReport_cReportTech" と競合しました。データベース「WHAnalysis」、テーブル「dbo.Control_cReportTech」、列「ReportTechKey」で競合が発生しました。ステートメントは終了されました。

4

1 に答える 1

5

この問題は、テーブルに存在しないフィールドINSERTの値を取得しようとしているためです。ProcessKeyControl_cReportTech

ステートメントを変更してINSERT、対象のフィールドを指定しますINSERT

INSERT INTO [Control_cReport] (ProcessKey, ReportTechKey)
SELECT 12 as ProcessKey, 1 as ReportTechKey;
FROM WHAnalysis.dbo.Controltb_ReportingScheduler_jq;

デモで SQL Fiddleを参照してください

列が指定されていない場合、テーブル構造の順序で値を挿入しようとするため、現在のクエリの代わりに上記のクエリを使用します。そのため、外部キーに違反する値を列12に挿入しようとしています。ReportTechKey

データを挿入する列の順序を指定する方が常にはるかに優れています。

于 2012-10-08T11:10:32.823 に答える