如何插入自动生成的值“ID”

时间:2013-09-22 21:47:33

标签: sql-server

我正在使用SQL处理现有表。我必须在此表中插入以下数据。这是一个功课问题!以下是问题和我的代码。我不断收到以下错误.....无法将值NULL插入列'ProductID',表'jc0541535.dbo.Products';列不允许空值。 INSERT失败。如何让ProductId自动生成?

  
      
  1. ProductID:下一个自动生成的ID
  2.   
  3. CategoryID:4
  4.   
  5. ProductCode:dgx_640
  6.   
  7. 产品名称:Yamaha DGX 640 88键数码钢琴
  8.   
  9. 描述:详细描述
  10.   
  11. ListPrice:799.99
  12.   
  13. DiscountPercent:0
  14.   
  15. DateAdded:今天的日期/时间   

    使用此陈述的列列表

  16.   

<这是我使用的代码,但它无法正常工作。有人可以指出原因。

  

插入产品       (ProductID,CategoryID,ProductCode,ProductName,Description,ListPrice,DiscountPercent,DateAdded)       VALUES(DEFAULT,4,'dgx_640','Yamaha DGX 640 88键数码钢琴',       “很久以来的描述。”,799.99,0,CURRENT_TIMESTAMP);

5 个答案:

答案 0 :(得分:2)

不要使用DEFAULT - 只需从insert语句中删除列:

INSERT INTO Products (CategoryID,ProductCode,ProductName,Description,ListPrice,DiscountPercent ,DateAdded) 
VALUES(4,'dgx_640','Yamaha DGX 640 88-Key Digital Piano', 'Long description to come.',799.99,0,CURRENT_TIMESTAMP);

SQL Fiddle Demo

此外,正如其他人所说,请确保该列为IDENTITY

答案 1 :(得分:0)

检查SQL Server Management Studio中的列属性。确保ProductID的“Is Identity”设置为“Yes”,并且“Identity Increment”设置为1。

答案 2 :(得分:0)

在设计中,点击列产品ID - >列属性 - >寻找身份规范 - >身份种子和增加1(或任何所需的值)并设置(Is Identity)为yes / true。

答案 3 :(得分:0)

DECLARE @ProductID INTEGER

SELECT @ProductID = ISNULL(MAX(ProductID),1)
FROM Products

INSERT INTO products(ProductID, CategoryID, ...)
VALUES(@ProductID, 4, ...)

这是否足以满足您的要求?

答案 4 :(得分:0)

我不得不带走我的,它看起来像这样:试试这个

INSERT INTO Products
(CategoryID, ProductCode, ProductName, Description, ListPrice, DiscountPercent, DateAdded)
VALUES (4, 'dgx_640', 'Yamaha DGX 640 88-Key Digital Piano', 'Long description to come', 799.99, 0, CURRENT_TIMESTAMP);