使用自动编号插入查询

时间:2013-11-18 11:58:45

标签: sql sql-server

嗨我有一个查询作为休闲

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。帮助我

3 个答案:

答案 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值。

     

每个表都应该有一个主键,每个表只能有一个   主键。

检查SQL PKsql_autoincrement