Sql server 尝试更新主表时SQL合并失败
我创建了这个MERGE语句,它从Temp获取数据并将其放入Word表中。以下是Temp的模式: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]
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