SQL Server 2005 引入 MAX 指定符,擴充 varchar、nvarchar、varbinary 存儲上限至 2^31-1 位元組 (2 GB),統稱「大值資料類型」。
| 新類型 (MAX) | 舊類型 (即將移除) |
|---|---|
varchar(max) | text |
nvarchar(max) | ntext |
varbinary(max) | image |
重要:未來版本將移除 text、ntext、image,新開發請直接使用 MAX 類型,舊系統規劃遷移。
UPDATE 支援 .WRITE(expression, @Offset, @Length) 對大值類型進行部分/完整更新,替代舊版文字指標 (UPDATETEXT)。
CREATE TABLE test1(ids INT, DocumentSummary NVARCHAR(MAX));
INSERT INTO test1 VALUES (1, N'abcdefg');
-- 1. 從位移 4 截斷 (保留前 4 字元)
UPDATE test1 SET DocumentSummary.WRITE(NULL, 4, 0); -- 結果: 'abcd'
-- 2. 結尾追加
UPDATE test1 SET DocumentSummary.WRITE(N'hi', NULL, 0); -- 結果: 'abcdefghi'
-- 3. 從位移 1 替換到結尾
UPDATE test1 SET DocumentSummary.WRITE(N'hi', 1, NULL); -- 結果: 'ahi'
@Offset 為零基索引 (0 代表第一字元)。NULL 值欄位,也不能將值設為 NULL (需用一般 SET col = value)。expression = NULL 時忽略 @Length,從 @Offset 截斷至結尾。@Offset = NULL 時在結尾追加 expression,忽略 @Length。@Length = NULL 時刪除從 @Offset 到結尾的所有資料。非 MAX 類型 (如 varchar(100)) 可用 STUFF、SUBSTRING 等字串函數組合實現。
query()、value()、exist()、nodes()、modify() (XQuery/XPath)。varchar(max) 等 MAX 類型。text/ntext/image 可用 ALTER TABLE ... ALTER COLUMN col VARCHAR(MAX) 就地轉換 (資料不動)。SqlDbType.VarChar + Size = -1 表示 MAX。