2013-06-14 4 views
0

Я в настоящее время пытаюсь скопировать все данные из одной таблицы в другую, как вторая таблица заказан немного по-другому, я использую следующий SQL скрипт для этого:Копирование из одного столбца «не null» в другое дает «Невозможно вставить значение null в столбец».

USE LoanersTest 
DROP TABLE LoanerItems1 
CREATE TABLE LoanerItems1 
(
LoanerKey INT NOT NULL UNIQUE 
,BCPartNumber VARCHAR(255) NULL 
,Manufacturer VARCHAR(255) NULL 
,Model VARCHAR(255) NULL 
,Modality INT NOT NULL UNIQUE 
,Status INT NOT NULL UNIQUE 
,Location INT NOT NULL UNIQUE 
,ShelvingKey INT NOT NULL UNIQUE 
,CalDate VARCHAR(255) NULL 
,CalDue VARCHAR(255) NULL 
,BCID VARCHAR(255) NULL 
,SerialNumber VARCHAR(255) NULL 
,AssetTag VARCHAR(255) NULL 
,LoanTerm VARCHAR(255) NULL 
,PartNumber VARCHAR(255) NULL 
,Notes VARCHAR(255) NULL 
,CriticalNotes VARCHAR(255) NULL 
,ShippingNotes VARCHAR(255) NULL 
,ReceivingNotes VARCHAR(255) NULL 
,Description VARCHAR(255) NULL 
,Details VARCHAR(255) NULL 
,Attachments VARCHAR(255) NULL 
,Manuals VARCHAR(255) NULL 
,PRIMARY KEY (LoanerKey) 
) 
INSERT INTO LoanerItems1 (LoanerKey) 
    SELECT LoanerKey FROM LoanerItems 

INSERT INTO LoanerItems1 (BCPartNumber) 
    SELECT BCPartNumber FROM LoanerItems 

INSERT INTO LoanerItems1 (Manufacturer) 
    SELECT Manufacturer FROM LoanerItems 

INSERT INTO LoanerItems1 (Model) 
    SELECT Model FROM LoanerItems 

INSERT INTO LoanerItems1 (Modality) 
    SELECT Modality FROM LoanerItems 

INSERT INTO LoanerItems1 (Status) 
    SELECT Status FROM LoanerItems 

INSERT INTO LoanerItems1 (Location) 
    SELECT Location FROM LoanerItems 

INSERT INTO LoanerItems1 (ShelvingKey) 
    SELECT ShelvingKey FROM LoanerItems 

INSERT INTO LoanerItems1 (CalDate) 
    SELECT CalDate FROM LoanerItems 

INSERT INTO LoanerItems1 (CalDue) 
    SELECT CalDue FROM LoanerItems 

INSERT INTO LoanerItems1 (BCID) 
    SELECT BCID FROM LoanerItems 

INSERT INTO LoanerItems1 (SerialNumber) 
    SELECT SerialNumber FROM LoanerItems 

INSERT INTO LoanerItems1 (AssetTag) 
    SELECT AssetTag FROM LoanerItems 

INSERT INTO LoanerItems1 (LoanTerm) 
    SELECT LoanTerm FROM LoanerItems 

INSERT INTO LoanerItems1 (PartNumber) 
    SELECT PartNumber FROM LoanerItems 

INSERT INTO LoanerItems1 (Notes) 
    SELECT Notes FROM LoanerItems 

INSERT INTO LoanerItems1 (CriticalNotes) 
    SELECT CriticalNotes FROM LoanerItems 

INSERT INTO LoanerItems1 (ShippingNotes) 
    SELECT ShippingNotes FROM LoanerItems 

INSERT INTO LoanerItems1 (ReceivingNotes) 
    SELECT ReveivingNotes FROM LoanerItems 

INSERT INTO LoanerItems1 (Description) 
    SELECT Description FROM LoanerItems 

INSERT INTO LoanerItems1 (Details) 
    SELECT Details FROM LoanerItems 

INSERT INTO LoanerItems1 (Attachments) 
    SELECT Attachments FROM LoanerItems 

INSERT INTO LoanerItems1 (Manuals) 
    SELECT Manuals FROM LoanerItems 

Первая таблица отформатирована точно то же (хотя столбцы упорядочиваются по-разному) и содержит около 80 записей. Ни одна из записей не содержит нулевое значение и все же выполняет это утверждение возвращает следующее:

Не удается вставить значение NULL в столбце «модальности», таблица «LoanersTest.dbo.LoanerItems1»; столбец не допускает нулей. INSERT терпит неудачу.

И

Не удается вставить значение NULL в столбец 'LoanerKey', таблица 'LoanersTest.dbo.LoanerItems1'; столбец не допускает нулей. INSERT терпит неудачу.

Значение в LoanerKey, по существу, 1, 2, 3, 4, 5 ... 85, 86, 87. В колонке модальности содержит, на некоторое время, один и то же значение. Снова ни один столбец не содержит нулей, и все же эта ошибка возвращается.

ответ

5

Не вставляйте отдельные столбцы. Вставьте все столбцы в один запрос.

Как

INSERT INTO LoanerItems1 (LoanerKey, BCPartNumber, Manufacturer...) 
SELECT LoanerKey, BCPartNumber, Manufacturer, .... FROM LoanerItems 

При вставке только один столбец, как вы делаете, остальные столбцы по умолчанию NULL, и что является причиной ошибки, которые вы видите.

0

Необходимо вставить все записи за один раз. Ваши заявления пытаются вставить целую строку, но только установку одного столбца. Вы хотите:

insert into LoanerItems1 
(LoanerKey 
,BCPartNumber 
,Manufacturer 
,Model 
,Modality 
,Status 
,Location 
,ShelvingKey 
,CalDate 
,CalDue 
,BCID 
,SerialNumber 
,AssetTag 
,LoanTerm 
,PartNumber 
,Notes 
,CriticalNotes 
,ShippingNotes 
,ReceivingNotes 
,Description 
,Details 
,Attachments 
,Manuals 
,BCPartNumber 
,Manufacturer 
,Model 
,Modality 
,Status 
,Location 
,ShelvingKey 
,CalDate 
,CalDue 
,BCID 
,SerialNumber 
,AssetTag 
,LoanTerm 
,PartNumber 
,Notes 
,CriticalNotes 
,ShippingNotes 
,ReceivingNotes 
,Description 
,Details 
,Attachments 
,Manuals) 
SELECT LoanerKey 
,BCPartNumber 
,Manufacturer 
,Model 
,Modality 
,Status 
,Location 
,ShelvingKey 
,CalDate 
,CalDue 
,BCID 
,SerialNumber 
,AssetTag 
,LoanTerm 
,PartNumber 
,Notes 
,CriticalNotes 
,ShippingNotes 
,ReceivingNotes 
,Description 
,Details 
,Attachments 
,Manuals 
,BCPartNumber 
,Manufacturer 
,Model 
,Modality 
,Status 
,Location 
,ShelvingKey 
,CalDate 
,CalDue 
,BCID 
,SerialNumber 
,AssetTag 
,LoanTerm 
,PartNumber 
,Notes 
,CriticalNotes 
,ShippingNotes 
,ReceivingNotes 
,Description 
,Details 
,Attachments 
,Manuals 
from LoanerItems 
+0

Вам не хватает инструкции SELECT. – ErikE

+0

Нет, я не был, но я сделал все CAPS лучше. –

+0

Ох ... ты прав! Извини за это. Я использую отступы, чтобы помочь с этой проблемой. – ErikE

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