2011-03-07 31 views
1

我試圖從表中選擇名爲「YEAR」的列。選擇名爲YEAR的列時出現SQL錯誤

我可以使用實現這一目標的以下內容:

SELECT * FROM OPENQUERY (mybook, 'SELECT mytable.year FROM mytable') 

而不是當我用這個:

SELECT * FROM OPENQUERY (mybook, 'SELECT year FROM mytable') 

這是因爲「年」是某種形式的保留字或者是有其他的原因?

+1

什麼SQL實現? – JNK 2011-03-07 16:40:10

+0

SQL Server我相信... – Tom 2011-03-07 16:50:29

+0

有兩臺服務器涉及。顯然你是從SQL Server運行的(哪個版本?) - 我們還需要知道'mybook'指向的位置(數據庫系統和版本) – RichardTheKiwi 2011-03-07 20:12:39

回答

6

在SQL Server中,Year是一個保留字。所以當你嘗試使用它時會抱怨。

如果您使用的是MySql,則可以使用大約一年的back tick(`)。

在SQL Server中,您可以使用[]的大約year[year]

編輯

看到更新後的問題後,下面的SQL應該工作:

SELECT * FROM OPENQUERY (mybook, 'SELECT [year] FROM mytable')

+0

我認爲你說得很對,但是你的解決方案沒有工作。我已更新查詢以顯示它是如何實際與OPENQUERY一起使用的...... – Tom 2011-03-07 16:49:56

+1

@Tom - 您需要使用數據庫名稱/架構格式(Database.dbo.table)或使用SQL Server名稱字符這是方括號'[]' – JNK 2011-03-07 16:57:44

+1

這是投票了這麼多??這是虛假的。 SQL Server從來沒有在沒有引號的情況下被阻止。它是保留的,但不受保護。我剛剛使用OPENQUERY進行了驗證,它的工作原理是'select year from mytable' – RichardTheKiwi 2011-03-07 20:10:54

4

使用

SELECT [year] FROM mytable 
3
SELECT [year] FROM mytable 

使用括號中的字段名稱