嗨我有一个查询作为休闲
INSERT INTO CPQ
(BackLog_ID,
Priority,
Category,
Type,
Country,
Region,
TN,
[Date Entered],
Source,
Brand,
[Remote #],
[Target #],
Device,
Status,
[Capture Type],
Comment,
Processed)
SELECT BackLog_ID,
Priority,
CASE
WHEN Type = 'I' THEN 'Category-1'
WHEN TYPE = 'P' THEN 'Category-1'
WHEN TYPE = 'B' THEN 'Category-2'
END AS Category,
Type,
Country,
Region,
TN,
[Date Entered],
Source,
Brand,
[Remote #],
[Target #],
Device,
Status,
[Capture Type],
Comment,
Processed
FROM BackLog
WHERE ( Processed = 0 )
AND ( Type <> 'Z' )
AND ( Region = 'Asia' )
AND ( Country = 'China'
OR Country = 'Japan' )
在上面查询表中CPQ具有PK As CPQ_ID及其非自动编号。现在上面的查询给出了如下错误
错误:
无法将值NULL插入列'CPQ_ID',表中 'Capture_Manager.dbo.CPQ';列不允许空值。 INSERT失败。
PLZ。帮助我
答案 0 :(得分:2)
1)你有一个PK列,它不是自动增量
2)您尝试在不为PK分配值的情况下向该表插入内容
3)您收到一条错误消息,指出您无法执行此操作
我不确定你需要什么更多的解决方案,但由于3)是1)和2)的结果,你将不得不改变1)或2)。
所以:
1)使您的PK列自动递增(或以其他方式在数据库级别自动填充)
或
2)执行insert语句时为您的PK插入一个(唯一!)值。
你做了两个中的任何一个,你的错误就会消失。
答案 1 :(得分:0)
问题是您正在尝试将空值插入CPQ_ID列,最好的方法是将CPQ_ID列设置为自动增量,
示例表创建启用了自动增量的代码
CREATE TABLE [dbo].[tablename](
[CPQ_ID] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
当您插入记录时,此代码“IDENTITY(1,1) NOT NULL
”始终会向列中插入自动递增的数字
但是,如果您不需要自动递增值,则必须将值解析为CPQ_ID列,或者必须使其可为空,这意味着您不能将其用作主键。
答案 2 :(得分:0)
如果字段是PK并且因为它不是自动递增,则应指定该字段的值。
PRIMARY KEY约束唯一标识a中的每条记录 数据库表。
主键必须包含唯一值。
主键列不能包含NULL值。
每个表都应该有一个主键,每个表只能有一个 主键。