2013-10-09 40 views
-2

我對此很新。我創造了這個表,我沒有問題的話:SQL查詢 - 列名錯誤,但不是那樣

CREATE TABLE [dbo].[Urban_Rail] (
[Id]  INT   IDENTITY (1, 1) NOT NULL, 
[Country] VARCHAR (50) NOT NULL, 
[City] VARCHAR (50) NOT NULL, 
[Type] VARCHAR (50) NOT NULL, 
[Gauge] NCHAR (10) NULL, 
[Year] NCHAR (10) NULL, 
[Status] VARCHAR (50) NULL, 
[Notes] VARCHAR (500) NULL, 
PRIMARY KEY CLUSTERED ([Id] ASC) 
); 

現在我試圖填補在使用此語句數據的幾千行:

INSERT INTO Urban_Rail ('Id','Country','City','Type','Gauge','Year','Status','Notes') VALUES ('','Algeria','Algiers','Metro','1435','2011','Open',''); 
INSERT INTO Urban_Rail ('Id','Country','City','Type','Gauge','Year','Status','Notes') VALUES ('','Algeria','Algiers','Tram','1435','2011','Open',''); 
INSERT INTO Urban_Rail ('Id','Country','City','Type','Gauge','Year','Status','Notes') VALUES ('','Algeria','Batna','Tram','','','Planned',''); 

但我得到的錯誤說,每列的名稱無效。這看起來不正確。我想知道它是否與Id有關,它是一個自動增量標識,我在查詢中沒有留下任何值。 我在這裏做錯了什麼?一些幫助將不勝感激。

+0

Id是一個標識列,將它從您插入到的列列表中刪除。它會在您插入數據時自動填充。 – Taryn

+0

感謝您的建議。我應該從雙方中刪除它嗎?我的意思是,像這樣:INSERT INTO Urban_Rail('Country','City','Type','Gauge','Year','Status','Notes')VALUES('Algeria','Algiers','Metro 」, '1435', '2011', '開', ''); – FeliceM

+2

你也不應該用'''引用你的列名,而應該用數據庫引用表和列名的方式。在SQL Server中,通常是'[]'。 –

回答

1

要麼從插入中刪除ID(因爲它是一個標識),要麼在運行插入之前讓特定ID將Identity_Insert打開,然後再關閉。

SET IDENTITY_INSERT [dbo].[Urban_Rail] ON 

INSERT INTO Urban_Rail (Id,Country,City,Type,Gauge,Year,Status,Notes) VALUES (1,'Algeria','Algiers','Metro','1435','2011','Open',''); 

SET IDENTITY_INSERT [dbo].[Urban_Rail] OFF 
0

INSERT語句中不應包含IDENTITY列。它會自動填充下一個值。

0

「ID」列是一個標識列,您不允許在數據庫分配它時插入它。把它從你插入的列名和值列表中取出。

如果你需要插入標識列,您可以使用

SET IDENTITY_INSERT <table> ON 

,但我猜你不需要的是,由於你的ID的外觀空白。