2015-12-16 206 views
0

我设置了一些脚本,用于将XML文件中的数据插入到SQL数据库中。我收到以下错误。SQL Insert Into无法插入NULL

Cannot insert the value NULL into column 'fighterID', table 'MMA  Database.dbo.FIGHTERStemp'; column does not allow nulls. INSERT fails. 

我把fighterID设置为主键并且不允许NULLS。我的意图是让它在插入时为每一行编号。我找到了一个建议将列属性修改为标识符的答案。但是,它不会让我调整列属性而不删除并再次添加表。

我可以这么做 - 但是什么是SQL语法来设置身份规范设置?我是否以正确的方式去做这件事?

+0

”它不会让我调整列属性而不删除并重新添加表。“你在哪里看到这个消息?在SSMS? SSMS中有一个设置停止了这个警告。 –

回答

2

这很简单,只需设置数据类型INT(整数)的字段,并关注它关键字IDENTITY。您可以包含seedincrement值;例如从1开始,按1递增,或者仅使用关键字IDENTITY作为1,1默认值。

CREATE TABLE MMA (FighterID INT IDENTITY (1,1), FighterInfo VARCHAR(MAX)) 
+0

注意:使用'IDENTITY'意味着'NOT NULL',所以不需要指定它 –

+0

工作到完美。谢谢。出于好奇 - 如果这张桌子增长,我不希望fighterID成为10,560,123 ....设置该列的最佳方式是什么?也许会生成一个随机的int/char组合? I.E. fighterID A12B7 –

+0

取决于你想让FighterID代表什么,战斗机在DB中停留多长时间,它是什么类型的数据库等等。但是,有很多不同的方法可以设置它并指定NULL一个无效的“价值”。 –

0

虽然将数据插入到主键,您可以检查值之前的最大ID,然后递增到下一个值插入新行之前。

在SQL中,您需要在更改其规范之前删除表。您可以通过备份到临时表中,然后删除主表,然后从临时表中插入数据来做到这一点。 “

+0

此方法存在并发问题,不建议使用 –