2013-06-02 82 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值插入列「ID」,儘管列有IDENTITY屬性

,然後當我輸入下面的返回「消息515,級別16,狀態2,第8行 不能將NULL值插入'TypeID'列.....列不允許,INSERT失敗。「聲明終止

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

我試過在列和表級別創建約束,但第二個INSERT語句仍然拒絕輸入。通過GUI進行雙重檢查,'TypeID'肯定有一個IDENTITY屬性。

我看着無處不在,這似乎錯誤來自缺乏IDENTITY屬性的阻止,但其目前在我的創作報表和錯誤仍然出現。試圖刪除種子,並從身份增量,仍然沒有。也嘗試一次插入一行數據,也沒有。

P.S如果您有沒有注意到實際的名稱已被取代等欄目行已被省略。

+1

您創建的列TYPEID爲NOT NULL。 ** TYPEID TINYINT NOT NULL IDENTITY(1,1)** – Somar

+0

只是嘗試沒有NOT NULL和同樣的錯誤產生 – isif

+0

我一直在檢討這對於〜3天.. – isif

回答

5

由於您將typID創建爲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個表:類型1,其具有一個主鍵TypeId是自動生成的 和SPlan其中有一個主鍵PlanId,這也是自動生成的一個外鍵 TYPEID是絕提供並且不能爲空

書面您必須輸入1個或多個記錄到Type1第一,獲得他們TypeId s,則在SPlan輸入這些TypeId s轉換新記錄。

順便說一句,使用TINYINT爲您的主鍵的數據類型是完全合法的,但可能是一個非常糟糕的主意,如果這是不是功課其他任何東西。

+0

+1:現在這個答案看起來也是正確的。 – RBarryYoung

+0

所以基本上我必須手動對應從一個表到另一個正確的TypeID? – isif

+0

它接受數據:D – isif

1

你需要在你的第二個查詢供應TYPEID值,因爲你有一個類型1表,並因爲在斯普蘭表中的TYPEID列也宣告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是[Type1]表中的'IDENTITY'列,*** [Splan]中不是***。在[Splan]中它只是一個普通的'NOT NULL'列,所以你必須提供一個值(可能是[Type1]中生成的值)。 – RBarryYoung

+0

對不起,這條評論是針對其他答案的 – isif

相關問題