2013-06-02 2 views
0
CREATE TABLE Type1 
(
    TypeID  TINYINT   NOT NULL   IDENTITY(1,1), 
    TypeName  VARCHAR(20)  NOT NULL, 
    Speed  VARCHAR(10)  NOT NULL 

    CONSTRAINT TypeID_pk  PRIMARY KEY (TypeID) 
); 


    CREATE TABLE Splan 
(
    PlanID  TINYINT   NOT NULL   IDENTITY(1,1), 
    TypeID  TINYINT   NOT NULL, 
    PlanName  VARCHAR(20)  NOT NULL, 
    Quota  SMALLINT  NOT NULL 

    CONSTRAINT PlanID_pk  PRIMARY KEY (PlanID) 
    CONSTRAINT TypeID_fk  FOREIGN KEY (TypeID) REFERENCES Type1(TypeID)          
); 



    INSERT INTO Type1(TypeName, Speed) 
    VALUES ('Sample type', '10Mbps'), 
     ('Other type', '50Mbps'); 

^Вплоть до тех пор его тонкойне удается вставить значение NULL в столбец «идентификатор», хотя колонка имеет IDENTITY свойство

, а затем, когда я ввожу следующее возвращает «Msg 515, уровень 16, состояние 2, Строка 8 Невозможно вставить значение NULL в столбец «TypeID» ..... колонка не разрешает. INSERT терпит неудачу ». Заявление завершается

INSERT INTO Splan(PlanName, Quota) 
    VALUES ('Some sample name', '500GB'), 
      ('sample2, '250GB'); 

Я попытался создать ограничения на обоих столбцов и таблицы уровня, но второй оператор INSERT еще отказавшихся войти. Двойная проверка через GUI и «TypeID» определенно имеет свойство IDENTITY.

Я искал всюду, и эти ошибки, по-видимому, проистекают из-за отсутствия свойства IDENTITY, но его настоящее в моих заявлениях о создании и ошибка все еще возникает. Пробовал удалить семя и приращение от IDENTITY, все равно ничего. Также попытался вставить данные по одной строке за раз, и ничего там не было.

P.S Если вы не заметили, что фактические имена были заменены, а другие строки столбцов были опущены.

+1

вы создали столбец TypeID, как NOT NULL. ** TypeID TINYINT NOT NULL IDENTITY (1,1) ** – Somar

+0

только что пробовал без NOT NULL, и эта же ошибка была произведена – isif

+0

Я рассматривал это в течение ~ 3 дней .. – isif

ответ

5

Поскольку вы создали идентификатор типа как NOT NULL, Sql жалуется, что значение по умолчанию (NULL) неприемлемо.

Попробуйте

INSERT INTO Splan(TypeID, PlanName, Quota) 
VALUES (1, 'Some sample name', '500GB'), 
     (2, 'sample2, '250GB'); 

Где соответствующие записи с TypeID = 1 и TypeID = 2 находятся в вашем Type1 таблице.


Вы создаете 2 таблицы: Type1, которая имеет первичный ключ TypeId, который автоматически генерируется и SPlan, которая имеет первичный ключ PlanId, который также автогенерируемая ивнешнего ключ TypeId что сусла поставляться и не может быть пустым.

Как написано вы должны ввести 1 или несколько записей в Type1 первых, получить их TypeId с, а затем ввести эти TypeId S в новые записи в SPlan.

Кстати, с использованием TINYINT для ваших первичных ключевых типов данных вполне легально, но, вероятно, очень плохая идея, если это что-то иное, чем домашнее задание.

+0

+1: Этот ответ теперь выглядит правильно. – RBarryYoung

+0

Итак, в основном мне нужно вручную перевести правильный TypeID из одной таблицы в другую? – isif

+0

принимает данные: D – isif

1

Вам нужно указать значение для TypeID во втором запросе, потому что у вас есть отношение внешнего ключа к таблице Type1 и потому, что столбец TypeID в таблице Splan также объявлен NOT NULL.

INSERT INTO Splan(TypeID, PlanName, Quota) 
    VALUES (1, 'Some sample name', '500GB'), 
      (2, 'sample2, '250GB'); 

Попробуйте вставить обе записи в транзакции с использованием SCOPE_IDENTITY

begin tran 

INSERT INTO Type1(TypeName, Speed) 
    VALUES ('Sample type', '10Mbps') 

DECLARE @id INT = SCOPE_IDENTITY(); 

INSERT INTO Splan(TypeID, PlanName, Quota) 
     VALUES (@id, 'Some sample name', '500GB') 

commit 
+0

, но, установив, что IDENTITY (1,1) не следует начинать с 1, а затем продолжить оттуда? Я только что спросил таблицу Type1, и результаты показывают? – isif

+1

@isif Это правильный ответ. TypeID является столбцом «IDENTITY» в таблице [Type1], *** *** *** в [Splan]. В [Splan] это обычный столбец «NOT NULL», поэтому вам нужно поставить vaule (предположительно тот, который был сгенерирован в [Type1]). – RBarryYoung

+0

Извините, что комментарий был для другого ответа – isif

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