【MERGE报错】尝试将不可为 NULL 的列的值设置为 NULL

不胖到130不改名字 2019-12-11 08:26:35

BEGIN TRAN
SELECT * FROM dbo.ttp_plan_d_9_18100474
DECLARE @emp VARCHAR(50) = '18100474';
DECLARE @id VARCHAR(10) = '8';
MERGE INTO HMFG.dbo.ttp_plan_d AS t
USING dbo.ttp_plan_d_9_18100474 AS s
ON t.plnd_id = s.plnd_id
WHEN MATCHED
THEN UPDATE SET
t.plnd_date_interval = s.plnd_date_interval,
t.plnd_date_unit = s.plnd_date_unit,
t.plnd_date_num = s.plnd_date_num,
t.plnd_beg_date = s.plnd_beg_date,
t.plnd_end_date = s.plnd_end_date,
t.plnd_time_interval = s.plnd_time_interval,
t.plnd_time_unit = s.plnd_time_unit,
t.plnd_time_num = s.plnd_time_num,
t.plnd_beg_time = s.plnd_beg_time,
t.plnd_end_time = s.plnd_end_time,
t.plnd_duration = s.plnd_duration,
t.plnd_leadtime = s.plnd_leadtime,
t.isenable = s.isenable,
t.modtime = GETDATE(),
t.moduser = @emp
WHEN NOT MATCHED BY TARGET
THEN INSERT
( plnd_plnm_id ,
plnd_date_interval ,
plnd_date_unit ,
plnd_date_num ,
plnd_beg_date ,
plnd_end_date ,
plnd_time_interval ,
plnd_time_unit ,
plnd_time_num ,
plnd_beg_time ,
plnd_end_time ,
plnd_duration ,
plnd_leadtime ,
isenable ,
addtime ,
adduser ,
modtime ,
moduser ,
acctid
)
VALUES ( @id , -- plnd_plnm_id - int
s.plnd_date_interval , -- plnd_date_interval - varchar(1)
s.plnd_date_unit , -- plnd_date_unit - varchar(10)
s.plnd_date_num , -- plnd_date_num - int
s.plnd_beg_date , -- plnd_beg_date - datetime
s.plnd_end_date , -- plnd_end_date - datetime
s.plnd_time_interval , -- plnd_time_interval - tinyint
s.plnd_time_unit , -- plnd_time_unit - varchar(10)
s.plnd_time_num , -- plnd_time_num - int
s.plnd_beg_time , -- plnd_beg_time - datetime
s.plnd_end_time , -- plnd_end_time - datetime
s.plnd_duration , -- plnd_duration - int
s.plnd_leadtime , -- plnd_leadtime - int
s.isenable , -- isenable - tinyint
GETDATE() , -- addtime - datetime
@emp , -- adduser - varchar(20)
GETDATE() , -- modtime - datetime
@emp , -- moduser - varchar(20)
1 -- acctid - int
);
DROP TABLE dbo.ttp_plan_d_9_18100474;
SELECT @id Code, 'OK' Msg;

ROLLBACK


使用merge语法时报错。
尝试将不可为 NULL 的列的值设置为 NULL。




但是原表数据里面只有这四个字段为null,而且这四个字段都是可以为NULL的



而且我们平时有字段不能为NULL
应该是这样提示吧【不能将值 NULL 插入列 '...',表 '...';列不允许有 Null 值】
但是现在怎么是这样的提示【尝试将不可为 NULL 的列的值设置为 NULL。


...全文
339 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 Hello World,的回复:
你应该不会在一个表里弄两个自增列,现在有两个列没有数据,目测是sid列出了问题
sid不是自增的,有默认值
  • 打赏
  • 举报
回复
引用 2 楼 吉普赛的歌 的回复:
你弄反了, 应该是那些 not null 的字段出了问题
我知道,但是source表就两行数据 not null的字段都不为null啊
吉普赛的歌 2019-12-11
  • 打赏
  • 举报
回复
你弄反了, 应该是那些 not null 的字段出了问题
  • 打赏
  • 举报
回复
就没有人遇到过这种情况吗
Hello World, 2019-12-11
  • 打赏
  • 举报
回复
你应该不会在一个表里弄两个自增列,现在有两个列没有数据,目测是sid列出了问题
Hello World, 2019-12-11
  • 打赏
  • 举报
回复
plnd_id和sid两列是不是自增的?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧