SQL Server 中 text 型別雖支援大量文字,但直接 INSERT 受限於 8000 位元組。若欄位 content 為 text 型別,執行 INSERT INTO News (title, content) VALUES (@title, @content) 會因超過限制而失敗。
核心步驟:
TEXTPTR)WRITETEXT 以指標寫入大量資料CREATE PROCEDURE NewsInsert
@title char(200),
@content text
AS
BEGIN
INSERT INTO News (title, content) VALUES (@title, '');
DECLARE @ptrval binary(16);
SELECT @ptrval = TEXTPTR(content)
FROM News
WHERE id = @@IDENTITY;
WRITETEXT News.content @ptrval @content;
END
GO
CREATE PROCEDURE NewsUpdate
@title char(200),
@content text,
@id int
AS
BEGIN
UPDATE News SET title = @title, content = '' WHERE id = @id;
DECLARE @ptrval binary(16);
SELECT @ptrval = TEXTPTR(content)
FROM News
WHERE id = @id;
WRITETEXT News.content @ptrval @content;
END
GO
TEXTPTR 回傳 NULL 導致後續失敗此方法可突破 8000 位元組限制,支援寫入 text 型別理論最大長度(2^31-1 位元組)的資料。