共用方式為


WRITETEXT (Transact-SQL)

允許現有 text、ntext 或 image 資料行記錄最少的互動式更新。WRITETEXT 會覆寫它所影響之資料行中的任何現有資料。檢視中的 text、ntext 和 image 資料行不能使用 WRITETEXT。

重要事項重要事項

未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 UPDATE 陳述式的大數值資料類型和 .WRITE 子句。

主題連結圖示Transact-SQL 語法慣例

語法

WRITETEXT [BULK]
    { table.column text_ptr }
    [ WITH LOG ] { data }

引數

  • BULK
    讓上傳工具能夠上傳二進位資料流。此資料流必須由位於 TDS 通訊協定層級的工具提供。當資料流不存在時,查詢處理器就會忽略 BULK 選項。

    重要事項重要事項

    我們建議您不要將 BULK 選項用於以 SQL Server 為基礎的應用程式中。未來的 SQL Server 版本可能會變更或移除這個選項。

  • table**.**column
    這是要更新的資料表和 text、ntext 或 image 資料行的名稱。資料表和資料行名稱必須符合識別碼的規則。資料庫名稱和擁有者名稱的指定是選擇性的。

  • text_ptr
    這是用來儲存 text、ntext 或 image 資料之指標的值。text_ptr 必須是 binary(16)。若要建立文字指標,請搭配 text、ntext 或 image 資料行並非 Null 的資料,來執行 INSERTUPDATE 陳述式。

  • WITH LOG
    SQL Server 會忽略這個項目。記錄取決於資料庫的實際復原模式。

  • data
    這是要儲存的實際 text、ntext 或 image 資料。data 可以是常值或參數。text、ntext 和 image 資料可利用 WRITETEXT 以互動方式插入的文字,最大長度大約是 120 KB。

備註

請利用 WRITETEXT 來取代 text、ntext 和 image 資料,利用 UPDATETEXT 來修改 text、ntext 和 image 資料。UPDATETEXT 比較靈活,因為它只會變更 text、ntext 或 image 資料行的一部份,不會變更整個資料行。

若要有最佳效能,我們建議您以 8040 位元組倍數的片段大小來插入或更新 text、ntext 和 image 資料。

如果資料庫復原模式是簡單或大量記錄,當插入或附加新資料時,使用 WRITETEXT 的 text、ntext 和 image 作業是最低限度記錄作業。如需詳細資訊,請參閱<可以進行最低限度記錄的作業>。

[!附註]

當更新現有的值時,不會使用最低限度記錄。

若要使 WRITETEXT 正確運作,資料行必須已包含有效的文字指標。

如果資料表沒有資料列文字,當利用 INSERT 在 text 資料行中加入明確或隱含的 Null 值,且無法取得這些 Null 的文字指標時,SQL Server 並不會初始化 text 資料行,因而能夠節省空間。若要將 text 資料行初始化成 NULL,請使用 UPDATE 陳述式。如果資料表有資料列文字,您就不需要初始化 Null 的文字資料行,一律能夠取得文字指標。

ODBC SQLPutData 函數的速度比較快,所用的動態記憶體比 WRITETEXT 少。這個函數最多可以插入 2 GB 的 text、ntext 或 image 資料。

在 SQL Server 中,指向 text、ntext 或 image 的資料列文字指標有可能存在而無效。如需有關 text in row 選項的詳細資訊,請參閱<sp_tableoption (Transact-SQL)>。如需有關讓文字指標無效的詳細資訊,請參閱<sp_invalidate_textptr (Transact-SQL)>。

權限

需要指定資料表的 UPDATE 權限。當傳送 UPDATE 權限時,可以傳送權限。

範例

下列範例將文字指標放在區域變數 @ptrval 中,再利用 WRITETEXT,將新的文字字串放入 @ptrval 所指向的資料列中。

[!附註]

若要執行這個範例,您必須安裝 pubs 範例資料庫。如需有關如何安裝 pubs 範例資料庫的詳細資訊,請參閱<下載 Northwind 和 pubs 範例資料庫>。

USE pubs;
GO
ALTER DATABASE pubs SET RECOVERY SIMPLE;
GO
DECLARE @ptrval binary(16);
SELECT @ptrval = TEXTPTR(pr_info) 
FROM pub_info pr, publishers p
WHERE p.pub_id = pr.pub_id 
   AND p.pub_name = 'New Moon Books'
WRITETEXT pub_info.pr_info @ptrval 'New Moon Books (NMB) has just released another top ten publication. With the latest publication this makes NMB the hottest new publisher of the year!';
GO
ALTER DATABASE pubs SET RECOVERY SIMPLE;
GO