2013-12-17 3 views
1

Я пытаюсь выполнить простую вставку и по какой-то причине пытается вставить нулевое значение в 1-й столбец вместо того, чтобы вставлять данные в который я указал в запросе.Вставить в запрос, вставив null в 1-й столбец вместо данных в указанный столбец

INSERT INTO EquipInfo (OrgID) 
SELECT OrgID from Org_Import 

Не удается вставить значение NULL в столбце 'MAC', таблица 'C: \ ILoveYouStackOverFlow \ Inventory.MDF.dbo.EquipInfo'; столбец не допускает нулей. INSERT терпит неудачу.

Таблица EquipInfo уже на месте, MAC является первичным ключом и является единственным столбцом, который не допускает значения NULL. В моей таблице Org_Import есть один столбец без нулевых значений.

Должен ли я предоставить значение для каждого столбца? Я просто хочу добавить OrgID из Org_Import в конец EquipInfo.

Все, что я хочу сделать, это добавить новый столбец в конец моей таблицы EquipInfo. MAC для MAC-адреса является коротким, он будет контролировать доступ к сети на vlan.

+0

Пожалуйста, сообщите нам схему вашего стола. –

+0

Есть ли в вашем столе более 1 поля? Вы не указываете какое-либо значение для поля «MAC» из вашей ошибки, чтобы попытаться вставить значение null для этого поля. – liebs19

+0

В таблице более 2500 полей с 18 столбцами. – user3089119

ответ

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 
+0

Я смотрел на это, и я думал, что могу просто вставить в конец таблицы без необходимости возиться с другими данными. http://stackoverflow.com/questions/13386894/sql-server-insert-example – user3089119

+0

«INSERT» создаст новые строки в таблице. Это то, что вы пытаетесь сделать? Если это так, эти новые строки должны будут следовать ограничениям вашей схемы таблиц, таким как включение любых требуемых значений. –

+0

Нет, я не хочу создавать новые строки. Я просто хочу OrgID в конце моей таблицы EquipInfo. Какую команду я должен использовать? – user3089119

2

Прочитайте сообщение об ошибке более тесно

Не удается вставить значение NULL в столбце «MAC»,

Похоже, у вас есть еще один столбец в таблице EquipInfo под названием MAC, которая не Разрешить null.

Два варианта:
(1) Добавьте его вставить заявление и присвоить ему значение; или
(2) Измените поле MAC, чтобы разрешить нулевые значения.
(3) Добавить значение по умолчанию на поле MAC

+1

(3) Измените поле MAC на значение DEFAULT – Anon

+0

MAC - это CHAR (25) (MAC-адрес), который будет контролировать доступ к сети. Будет ли значение по умолчанию 00-00-00-00-00-00 быть угрозой безопасности? – user3089119

+0

Не знаю. Я понятия не имею, что делает ваше приложение. Если вы обеспокоены тем, что это не требует значения и оставьте его нулевым. – JohnFx

1

Похоже, что ваш первичный ключ (MAC) не установлен в поле автоинкрементного. Я бы очень рекомендовал добавить это. В противном случае вам придется выяснить способ генерации новых значений первичного ключа таким образом, чтобы 1) не сталкивался с существующими значениями и 2) не позволял параллельным вставкам добавлять повторяющиеся ключи.

1

Как и все остальные, ваша таблица базы данных содержит по крайней мере один другой столбец, MAC, который имеет ограничение последовательности, которое не может быть NULL. Тем не менее, все остальные ответы рекомендуют способы победить ограничение (например, разрешить NULL, установить значения по умолчанию или мусор).Я считаю, что эти ответы безответственны.

Если ваша база данных имеет ограничение, вы должны предположить, что она существует по уважительной причине (предотвращение аномалий, принудительное использование внешних ключей и т. Д.). Если вы делаете что-то, что нарушает ограничение, ваш первый импульс должен быть равен , чтобы удовлетворить ограничение, чтобы не обойти его.

В вашем случае вы должны выяснить, что такое MAC; это внешний ключ? Затем определите значение внешнего ключа для записи с SELECT OrgID from Org_Import и вставьте это. Это первичный ключ? Затем сделайте MAC ключ автоматического инкремента. Что-то другое? Узнайте, что должно быть в этом столбце, не пытайтесь обойти целостность вашей базы данных.

+0

Я думаю, что я просто собираюсь бросить все, отредактировать сценарий сборки и снова вставить все мои данные. – user3089119

Смежные вопросы