4

これは私のSQL文の一部です:

MERGE INTO Scyk.dbo.Threads AS d
USING (SELECT Id,Question,QuestionTitle, Answer, Category FROM Homework.dbo.Zadanes) AS s
ON 1 = 2 
   WHEN NOT MATCHED THEN
      INSERT (CurrentValue, NumberOfPosts, TotalValue, Views, Title, DateCreated, LastPostAuthor, LastPostDateTime, IsDeleted, Restricted, RestrictWrite, Sticked, CategoryName, AuthorUserName)
      VALUES (0, 2, 0, 0, s.QuestionTitle, CURRENT_TIMESTAMP, 'zadania', DATEADD(second, 1, CURRENT_TIMESTAMP), 0, 0, 0, 0, s.Category, 'zadania')

これは私が得るエラーです:

MERGE ステートメントが FOREIGN KEY 制約 "FK_dbo.Threads_dbo.Categories_CategoryName" と競合しました。データベース「Scyk」、テーブル「dbo.Categories」、列「名前」で競合が発生しました。

だから私が最初にしたことは、外部キーの整合性をチェックすることでした:

SELECT Distinct(Category) FROM [Homework].[dbo].[Zadanes]
where not exists
(select distinct(Name) from Scyk.dbo.Categories)

しかし、これは何も返しませんでした。これは、外部キーが適切であることを意味します。それで、ここで何が起こっているのですか?

4

2 に答える 2

5

何が起こっているかというと、あなたのクエリは

から任意のカテゴリを選択しますHomework.dbo.Zadanesが、 に行がない場合に限りますScyk.dbo.Categories

おそらく後者のテーブルには行があるため、クエリは何も返しませんでした。

試す

SELECT z.Category 
  FROM [Homework].[dbo].[Zadanes] z LEFT OUTER JOIN
       [Scyk].[dbo].[Categories] c
    ON z.Category = c.Name
 WHERE c.Name IS NULL
 GROUP BY z.Category

また、OUTPUT句を使用して一度に多数の ID を再マップしない限りMERGE、代わりにを使用する理由はありませんINSERT

于 2013-11-06T19:49:49.207 に答える