Sql server 尝试更新主表时SQL合并失败

Sql server 尝试更新主表时SQL合并失败,sql-server,Sql Server,我创建了这个MERGE语句,它从Temp获取数据并将其放入Word表中。以下是Temp的模式: CREATE TABLE [dbo].[Temp] ( [Word] VARCHAR (MAX) NULL, [SFI] REAL NULL, [U] INT NULL, [D] REAL NULL ); 以下是合并: MERGE [dbo].[Word] as target USING [dbo]

我创建了这个MERGE语句,它从Temp获取数据并将其放入Word表中。以下是Temp的模式:

CREATE TABLE [dbo].[Temp] (
    [Word] VARCHAR (MAX) NULL,
    [SFI]  REAL          NULL,
    [U]    INT           NULL,
    [D]    REAL          NULL
);
以下是合并:

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);
当它运行时,它会给我一个错误,说“

我检查过了,Temp中没有空值

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

有没有人对我如何调试这个问题有什么建议,或者我进行合并的方式有什么问题?

好吧,您没有正确搜索
NULL
,列永远不会等于
NULL
,您必须使用
is NULL
is NOT NULL
来检查列是否为NULL:

 SELECT count(*) from Temp where Word is null;
试着改变这一排

USING [dbo].[Temp] as source
为此:

USING (SELECT * FROM [dbo].[Temp] where [dbo].[Temp].word is not null) source

可以发布“Word”表的架构吗?WordID列似乎不允许空值。
USING (SELECT * FROM [dbo].[Temp] where [dbo].[Temp].word is not null) source