首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

血淚教訓:資料表命名千萬別用 SQL Server 保留字 (user)

     編輯:關於SqlServer

事件回顧

開發客戶管理系統,資料庫 `info` 含資料表 `document` (客戶資料)、`back` (回訪記錄)、`user` (員工編號)。所有程式碼邏輯正確,唯獨存取 `user` 資料表總報 ODBC 驅動程式錯誤。檢查拼寫、資料類型、SQL 語法均無誤,耗時兩天無果,差點懷疑人生。

真相大白

`user` 是 **SQL Server 保留關鍵字** (系統函數 `USER_NAME()`、系統檢視 `sysusers` 等相關)。直接寫 `SELECT * FROM user` 會被剖析器誤判為函數/系統物件,導致語法錯誤或非預期行為。

解決方法

  1. 重新命名資料表 (最徹底): `sp_rename 'user', 'staff'` 或 `employees`、`accounts` 等非保留字名稱。
  2. 使用分隔識別符號 (若不得不保留名稱):
    SELECT * FROM [user]      -- 方括號 (SQL Server 標準)
    SELECT * FROM "user"       -- 雙引號 (需 SET QUOTED_IDENTIFIER ON)
    SELECT * FROM `user`       -- 反引號 (MySQL 風格,SQL Server 不支援)

常見保留字快速查核表

類別範例
系統函數/變數USER, CURRENT_USER, SESSION_USER, SYSTEM_USER, @@IDENTITY, @@ROWCOUNT
資料類型INT, VARCHAR, DATETIME, TEXT, IMAGE, MONEY, BIT
DDL 關鍵字CREATE, ALTER, DROP, TABLE, INDEX, VIEW, PROCEDURE, TRIGGER, DATABASE
DML 關鍵字SELECT, INSERT, UPDATE, DELETE, MERGE, JOIN, WHERE, GROUP, ORDER, HAVING
其他高風險名稱ORDER, GROUP, KEY, INDEX, DESC, ASC, LEVEL, SIZE, TYPE, MODE, STATUS, ROLE, USER, PASSWORD, LOGIN

最佳實踐

  • 命名規範:資料表加前綴 (如 `tbl_Staff`, `dt_User`),欄位加前綴 (如 `col_Name`),避開所有保留字。
  • 開發工具啟用 **IntelliSense / 關鍵字高亮**,輸入保留字會有視覺提示。
  • 上線前跑 **SQL Server 預存程序 `sp_help_reserved_keywords`** 或查詢 `sys.dm_xe_objects` 確認。

結語

一個保留字坑了兩天,換來一輩子的命名規範習慣。**永遠用分隔識別符號 `[ ]` 包裹識別名稱**,或干脆取個不衝突的好名字,讓編譯器、維護者、未來的自己都輕鬆。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved