2016-05-26 4 views
1

Tempからデータを取り出してWordテーブルに格納するこのMERGEステートメントを作成しました。ここでは温度のスキーマです:ここではプライマリテーブルを更新しようとするとSQL Mergeが失敗する

CREATE TABLE [dbo].[Temp] (
    [Word] VARCHAR (MAX) NULL, 
    [SFI] REAL   NULL, 
    [U] INT   NULL, 
    [D] REAL   NULL 
); 

はMERGEです:

MERGE [dbo].[Word] as target 
USING [dbo].[Temp] as source 
ON target.[WordId] = source.[Word] 
WHEN MATCHED THEN 
    UPDATE SET [NAWL963SFI] = source.[SFI], [NAWL963U] = source.[U], [NAWL963D] = source.[D] 
WHEN NOT MATCHED THEN 
    INSERT ([WordId],[NAWL963SFI],[NAWL963U], [NAWL963D], [NAWL963]) 
    VALUES (source.[Word],source.[SFI],source.[U], source.[D], 1); 

それはそれは私がチェックし、何のヌルが中に存在しない

Msg 515, Level 16, State 2, Line 41 
Cannot insert the value NULL into column 'WordId', table 'ab.dbo.Word'; column does not allow nulls. UPDATE fails. 
The statement has been terminated. 

」と言って私にエラーを与えて実行すると温度

SELECT count(*) from Temp where Word = null; 

私はこれをどのようにデバッグすることができるか、または私がマージをやっているやり方に何か間違っていることについて、何か提案がありますか?

SELECT count(*) from Temp where Word is null; 

はchaning試してみてください。

+0

することができますP 'Word'テーブルのスキーマは? WordID列はNULL値を許可していないようです。 – Sandesh

答えて

2

さて、あなたは、列、列がnullであるかどうかを確認するIS NULLIS NOT NULLを使用する必要があり、NULLに等しくなることはありません、正しくNULLさんを探していませんでしたこの行これに

USING [dbo].[Temp] as source 

USING (SELECT * FROM [dbo].[Temp] where [dbo].[Temp].word is not null) source 
関連する問題