2015-12-09 81 views
0

我想在表中添加100個存儲區。SQL Server:過程表不能插入值null

這是我的程序:

CREATE PROCEDURE [add100*sTORAGE] 
AS 
    DECLARE @i int, @start DATETIME, @end DATETIME 

    SET @start = GETDATE() 
    SET @i = 1 

    WHILE @i < 101 
    BEGIN 
     INSERT INTO Storage(storage_name) 
     VALUES (CONCAT('Nume', CONVERT(nvarchar, @i))) 

     SET @i = @i +1 
    END 

    SET @end = GETDATE() 

    DECLARE @testID INT = (SELECT TOP 1 (TestRunID) 
          FROM TestRuns 
          ORDER BY TestRunID DESC) 

    DECLARE @tableID INT = (SELECT tableID 
          FROM Tables 
          WHERE Name = 'Storage') 

    INSERT INTO TestRunTables (TestRunID, TableID, StartAt, EndAt) 
    VALUES (@testID, @tableID, @start, @end) 
GO 

我執行後得到一個錯誤:

消息515,級別16,狀態2,過程add100 *存儲,13號線
無法插入值'NULL'到列'TestRunID',表'OnlineShop.dbo.TestRunTables';列不允許有空值。 INSERT失敗。

當我查看錶格時,它已創建了99列。

我有關係的一些空表,這是它的刀片(也許這裏是原因):

--INSERTS-- 

-- insert views into "Views" 
INSERT INTO Views(Name) VALUES ('View1') 
INSERT INTO Views(Name) VALUES ('View2') 
INSERT INTO Views(Name) VALUES ('View3') 

select * from views 

delete from views where ViewID>1 

-- insert into "Tests" 
INSERT INTO Tests(Name) VALUES ('[add100*Storage-runView1-del100*Storage]') 
INSERT INTO Tests(Name) VALUES ('[add100*Product-runView2-del100*Product]') 
INSERT INTO Tests(Name) VALUES ('[add100*OrderProduct-runView3- del100*OrderProduct]') 

SELECT * FROM Tests 

--insert into tables 
INSERT INTO Tables(Name) VALUES ('Table1') 
INSERT INTO Tables(Name) VALUES ('Table2') 
INSERT INTO Tables(Name) VALUES ('Table3') 

SELECT * from Tables 

-- insert into "testTable" 
INSERT INTO TestTables(TestID, TableID, NoOfRows, Position) VALUES (1,1,100,1) 
INSERT INTO TestTables(TestID, TableID, NoOfRows, Position) VALUES (3,2,100,1) 
INSERT INTO TestTables(TestID, TableID, NoOfRows, Position) VALUES (2,3,100,1) 

SELECT * FROM TestTables 

-- insert into "testViews" 
INSERT INTO TestViews(TestID,ViewID) VALUES (1,1) 
INSERT INTO TestViews(TestID,ViewID) VALUES (3,2) 
INSERT INTO TestViews(TestID,ViewID) VALUES (2,3) 

SELECT * FROM TestViews 

有什麼不對?謝謝。

+0

TestRuns表中是否有任何數據?在運行這個'SELECT TOP 1(TestRunID)FROM TestRuns ORDER BY TestRunID DESC'時返回什麼值,它看起來TestRuns表中沒有行 –

+0

不,我沒有任何數據。那麼解決方案就是介紹一些價值觀? – Nero

+0

是的,它應該返回一些數據,或者在沒有行返回時將其默認爲某個值 –

回答

2

錯誤告訴你一切 - 表TestRunTables有列「TestRunID」,它需要該字段有一個值。您需要確保將值插入該字段,或者更改列,以便在未指定時使用默認值。

這條線:

DECLARE @testID INT = (SELECT TOP 1 (TestRunID) FROM TestRuns ORDER BY TestRunID DESC) 

將設置@testID爲空,如果沒有記錄從TestRuns或者如果第一TestRunID爲空返回。這可能是你需要解決的問題。