SQL Server 中的 `TIMESTAMP` 類型(現行名 `ROWVERSION`)不是日期時間類型!**
表結構應為:
CREATE TABLE table1 (
id INT PRIMARY KEY,
REG_DATE DATETIME -- 或 DATETIME2, SMALLDATETIME
-- 而非 TIMESTAMP
);
UPDATE table1
SET REG_DATE = '2015-12-31 23:59:59'
WHERE id = 目標行ID; -- 必須有 WHERE 條件
-- 無歧義 ISO 8601 格式(推薦)
UPDATE table1
SET REG_DATE = '2015-12-31T23:59:59'
WHERE id = 123;
-- 或使用 CONVERT 指定樣式
UPDATE table1
SET REG_DATE = CONVERT(DATETIME, '2015-12-31 23:59:59', 120)
WHERE id = 123;
**無法手動設置具體值**,只能:
UPDATE table1 SET some_col = some_col WHERE id = 123; -- timestamp 自動更新
SELECT @@DBTS; -- 當前數據庫最大 timestamp 值
SELECT timestamp_col FROM table1 WHERE id = 123;
| 類型 | 範圍 | 精度 | 儲存 | 建議用途 |
|---|---|---|---|---|
| DATETIME | 1753-01-01 ~ 9999-12-31 | 3.33ms | 8 bytes | 舊系統兼容 |
| DATETIME2 | 0001-01-01 ~ 9999-12-31 | 100ns | 6-8 bytes | **新開發首選** |
| SMALLDATETIME | 1900-01-01 ~ 2079-06-06 | 1 分鐘 | 4 bytes | 不需秒精度 |
| DATE | 0001-01-01 ~ 9999-12-31 | 1 天 | 3 bytes | 僅日期 |
| TIME | 00:00:00 ~ 23:59:59.9999999 | 100ns | 3-5 bytes | 僅時間 |
| TIMESTAMP/ROWVERSION | 自動遞增二進制 | - | 8 bytes | 版本戳/樂觀鎖 |
用戶困惑源於 **類型名稱誤解**。`TIMESTAMP` ≠ 日期時間。若需存儲「15年12月31日」,列類型必須是 `DATETIME`/`DATETIME2` 等,直接用標準 ISO 格式字串更新即可,無需修改服務器時間。