2015-04-02 69 views
1

我正在嘗試爲我的最後一年項目創建一張表(如下所示),但我遇到了SQL名稱衝突錯誤。看起來,'用戶' 和'角色'是由SQL保留的。有什麼辦法可以解決 問題,無需重新命名單詞。如何解決SQL名稱衝突而不重命名錶屬性?

CREATE TABLE User 
(
    ID INT generated by default as identity PRIMARY KEY, 
    username varchar(45) NOT NULL, 
    password varchar(255) NOT NULL, 
    role varchar(255) NOT NULL 
); 
+0

這是SQL Server的? – 2015-04-02 13:46:55

回答

2

將圍繞用戶雙引號。一般來說,從不會引用所有標識符。

+0

我不確定引號是否有效,但方括號似乎是常態。至少在PostgreSQL中起作用 – 2015-04-02 13:45:25

+0

。 – 2015-04-02 13:47:04

+0

好點,OP沒有指定DBMS – 2015-04-02 13:47:33

3

在名稱(或任何您希望作爲列名稱的保留字)周圍放上方括號。

[用戶]

[作用]

2

嘗試,這是你使用SQL Server(在MySQL是可以做到的使用backticks``):

CREATE TABLE [User] 
(
    ID INT generated by default as identity PRIMARY KEY, 
    username varchar(45) NOT NULL, 
    password varchar(255) NOT NULL, 
    [role] varchar(255) NOT NULL 
); 

在一個側面說明: -不建議使用保留的關鍵字tabe名稱和列名稱。

使用一些其他名稱,如用戶和角色,這些名稱不是保留關鍵字,並且具有相似的namings。

編輯:

看你的意見後,它看起來像你使用的是Derby。所以你需要使用雙引號。

試試這個:

CREATE TABLE "User" 
(
    ID INT generated by default as identity PRIMARY KEY, 
    username varchar(45) NOT NULL, 
    password varchar(255) NOT NULL, 
    "role" varchar(255) NOT NULL 
); 
+0

謝謝。我嘗試了確切的命令,它會拋出:錯誤代碼30000,SQL狀態42X01:語法錯誤:遇到「[」在第1行,列14. 行1,列1 – user1036645 2015-04-02 14:21:24

+0

@ user1036645: - 請檢查更新的答案! – 2015-04-02 14:48:43

+1

它的工作原理!是的,我正在使用德比。 – user1036645 2015-04-02 16:02:07