WRITETEXT (Transact-SQL)
允許現有 text、ntext 或 image 資料行記錄最少的互動式更新。WRITETEXT 會覆寫它所影響之資料行中的任何現有資料。檢視中的 text、ntext 和 image 資料行不能使用 WRITETEXT。
重要事項 |
---|
未來的 Microsoft SQL Server 版本將移除這項功能。請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 UPDATE 陳述式的大數值資料類型和 .WRITE 子句。 |
語法
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 的資料,來執行 INSERT 或 UPDATE 陳述式。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