尝试插入具有主键自动增量但却出错的表

时间:2015-08-03 14:49:42

标签: sql-server

INSERT INTO Locality(versionNo,localityName, localityType, constiCode, deleteFlag,
    createdOn, lastUpdate,updatedBy) 
SELECT 1, localityName, Localitytype, constituencyCode + '' + regionCode, 1,
    CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_USER
FROM dbo.MasterTable.

Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column 'localityCode', table 'GovMaster.dbo.Locality';
column does not allow nulls. INSERT fails.

我想插入,但LocalityCode是主键,不应该为null。但我上面得到了这个错误。 localityCode是主键,不能为null。我希望localityCode是自动生成的,它应该在插入时自动增量。

3 个答案:

答案 0 :(得分:1)

您没有为localityCode插入一个值,但是您的字段列表中缺少该值:

INSERT INTO Locality(versionNo,localityName, localityType, constiCode, deleteFlag,
    createdOn, lastUpdate,updatedBy) 

当您将字段从INSERT列表中删除时,它会获得默认的NULL值。如果它是一个自动递增的ID字段,排除它是正确的,但它不是你的情况。您需要提供值,或更改架构以允许该字段的NULL值,或使其成为自动递增字段。

答案 1 :(得分:0)

只是切入追逐,你得到错误的原因是:

<强>问题:

  • 您的Locality表中列名localityCode定义为NOT NULL,但它似乎不是自动递增字段。
  • 其次,您没有在下面的insert语句中传递任何值,因此默认情况下它会将空值传递给您的localityCode列。

<强>解决方案:

  • 理想情况下,您希望在插入语句中明确地将一些非空值传递给localityCode
  • 另一个选项是更改localityCode列的null属性以接受NULL值。
  • 或者,如果您想将localityCode列设置为自动增量字段,您可能需要查看以下内容:Adding an identity to an existing column

希望这有帮助!

答案 2 :(得分:0)

谢谢你们。

我删除了现有列并使用 localityCode INT IDENTITY(1,1)重新创建了它,然后将列更改为主键。

: - )