語法骨架
CREATE TABLE [DBF] TableName1 [NAME LongTableName] [FREE]
(
FieldName1 FieldType [(nFieldWidth [, nPrecision])]
[NULL | NOT NULL]
[CHECK lExpression1 [ERROR cMessageText1]]
[DEFAULT eExpression1]
[PRIMARY KEY | UNIQUE]
[REFERENCES TableName2 [TAG TagName1]]
[NOCPTRANS]
[, FieldName2 ...]
[, PRIMARY KEY eExpression2 TAG TagName2 | UNIQUE eExpression3 TAG TagName3]
[, FOREIGN KEY eExpression4 TAG TagName4 [NODUP] REFERENCES TableName3 [TAG TagName5]]
[, CHECK lExpression2 [ERROR cMessageText2]]
)
| FROM ARRAY ArrayName
關鍵字詳細說明
| 子句 | 說明 |
DBF / TABLE | 同義,建立自由資料表或資料庫資料表。 |
NAME LongTableName | 長檔名 (最長 128 字元),僅在資料庫開啟時有效,儲存於 DBC 中。 |
FREE | 不加入目前開啟資料庫,建立為自由資料表。 |
FieldType | 單一字元型別代碼 (C=字串, N=數值, D=日期, T=日期時間, L=邏輯, M=備忘錄, G=General, Y=Currency, I=整數, B=雙精度, V=Varbinary, Q=Varbinary, @=Timestamp, +=AutoInc, O=Object, K=Blob)。部份型別需指定寬度/精度。 |
NULL / NOT NULL | 明確指定欄位是否允許空值。允許 NULL 的表格最多 254 欄位,否則 255 欄位。 |
CHECK ... ERROR | 資料列層級約束,違反時拋出自訂錯誤訊息。 |
DEFAULT | 預設值運算式,可為常數、函數、系統變數。 |
PRIMARY KEY / UNIQUE | 欄位層級主鍵/唯一約束,自動建立索引標籤。 |
REFERENCES ... TAG | 欄位層級外來鍵,參考父表主鍵/候選鍵索引標籤。 |
NOCPTRANS | 字串欄位不進行程式碼頁轉換 (二進位儲存)。 |
| 表格層級約束 | PRIMARY KEY eExpression TAG TagName、UNIQUE ...、FOREIGN KEY ... REFERENCES ...、CHECK ... 可跨欄位定義複合鍵或複雜條件。 |
FROM ARRAY | 依陣列結構快速建立資料表 (欄位名、型別、寬度取自陣列)。 |
型別代碼速查表
C(n) 字串 (1~254) N(n[,p]) 數值 (總位數 1~20, 精度 0~p)
D 日期 (YYYYMMDD) T 日期時間 (YYYYMMDD hh:mm:ss)
L 邏輯 (.T./.F.) M 備忘錄 (可變長度文字/二進位)
G General (OLE 物件) Y Currency (8 位整數, 4 位小數)
I 整數 (4 位元組) B 雙精度浮點數
V(n) Varbinary (1~254) Q(n) Varbinary (同上, 別名)
@ Timestamp (8 位元組) + AutoInc (自動遞增整數)
O 物件參考 K Blob (大型二進位物件)
SQL Server 開發者注意事項
- 上述語法為 Visual FoxPro (VFP) CREATE TABLE,非 T-SQL。SQL Server 使用
CREATE TABLE 但型別系統、約束語法、索引建立方式迥異。
- VFP 為檔案基礎、無交易日誌、鎖定機制不同;遷移至 SQL Server 時需對應型別 (如
N(10,2) → DECIMAL(10,2)、M → NVARCHAR(MAX)/VARBINARY(MAX)、+ → IDENTITY(1,1))。
- VFP 的
TAG 對應 SQL Server 索引名稱;REFERENCES 對應 FOREIGN KEY;CHECK 語法相似但 VFP 支援 ERROR 訊息自訂。
典型遷移範例
-- VFP
CREATE TABLE Customers (
CustID I PRIMARY KEY,
Name C(50) NOT NULL,
CreditLim Y DEFAULT 0,
Region C(20) REFERENCES Regions TAG RegionPK
)
-- SQL Server (T-SQL)
CREATE TABLE dbo.Customers (
CustID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
Name NVARCHAR(50) NOT NULL,
CreditLim MONEY NOT NULL DEFAULT (0),
RegionCode NVARCHAR(20) NULL,
CONSTRAINT FK_Customers_Regions FOREIGN KEY (RegionCode)
REFERENCES dbo.Regions (RegionCode)
);