我正在尝试执行一个简单的插入,并且出于某种原因,它试图将空值插入第1列,而不是将数据插入到我在查询中指定的列中。
INSERT INTO EquipInfo (OrgID)
SELECT OrgID from Org_Import
无法将值NULL插入列'MAC',表'C:\ ILoveYouStackOverFlow \ Inventory.MDF.dbo.EquipInfo';列不允许空值。 INSERT失败。
EquipInfo表已经到位,MAC是主键,并且是唯一不允许空值的列。我的Org_Import表有一列,其中没有空值。
我是否必须为每一列提供一个值?我基本上只想将Org_Import中的OrgID附加到EquipInfo的末尾。
我想要做的就是在EquipInfo表的末尾添加一个新列。 MAC是MAC地址的缩写,它将控制vlan上的网络访问。
答案 0 :(得分:2)
错误非常明确:EquipInfo
有一个名为MAC
的列,但是您的INSERT
语句没有为其提供值。你需要提供一个;要么是常数:
INSERT INTO EquipInfo (MAC, OrgID)
SELECT 0 as MAC, OrgID from Org_Import -- Assuming MAC is numeric
或者,作为Org_Import
的值:
INSERT INTO EquipInfo (MAC, OrgID)
SELECT MAC, OrgID from Org_Import -- Assuming MAC is in Org_Import
当然,您也可以删除NOT NULL
上的EquipInfo.MAC
约束:
ALTER TABLE EquipInfo ALTER COLUMN MAC whateverTypeMACIs NULL
或者给它一个默认值:
ALTER TABLE EquipInfo ADD DEFAULT 0 FOR MAC -- Assuming MAC is numeric
答案 1 :(得分:2)
更密切地阅读错误消息
无法将值插入“MAC”列,
看起来你在EquipInfo表中有另一个名为MAC的列,它不允许空值。
两个选项:
(1)将它添加到insert语句并为其赋值;或
(2)更改MAC字段以允许空值
(3)在MAC字段上添加默认值
答案 2 :(得分:1)
您的主键(MAC
)似乎未设置为自动增量字段。我强烈建议添加它。否则,您将不得不想办法以1)不与现有值冲突的方式生成新的主键值,2)不允许并发插入添加重复键。
答案 3 :(得分:1)
正如其他人所说,您的数据库表至少有一个其他列MAC
,它具有一致性约束,不能为NULL。但是,所有其他答案都建议了解除约束的方法(例如,允许NULL,设置默认值或垃圾值)。我相信这些答案是不负责任的。
如果您的数据库有约束,您应该认为它存在的原因很充分(防止出现异常,强制执行外键等)。如果你做了违反约束的事情,你的第一个冲动应该是满足约束,而不是绕过约束。
在你的情况下,你应该找出MAC
是什么;它是外键吗?然后确定具有SELECT OrgID from Org_Import
的记录的外键值应该是什么,并插入它。它是主键吗?然后使MAC
成为自动增量键。别的什么?找出本专栏中的内容,不要试图绕过数据库的完整性。