WRITETEXT (Transact-SQL)

適用対象:SQL ServerAzure SQL Managed Instance

既存の textntext、または image 列の最小限ログに記録する対話型の更新を許可します。 WRITETEXT は、影響のある列内の既存のすべてのデータを上書きします。 WRITETEXT をビュー内の text 列、ntext 列、image 列に対して使用することはできません。

重要

この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに、large-value データ型と UPDATE ステートメントの .WRITE 句を使用してください。

Transact-SQL 構文表記規則

構文

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

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

BULK
アップロード ツールによるバイナリ データ ストリームのアップロードを有効にします。 ストリームは、TDS プロトコル レベルでツールが提供する必要があります。 データ ストリームが存在しない場合、クエリ プロセッサは BULK オプションを無視します。

重要

SQL Server ベースのアプリケーションでの BULK オプションの使用はお勧めしません。 このオプションは将来のバージョンの SQL Server では変更または削除される可能性があります。

table.column
更新するテーブルと textntext、または image 型の列の名前。 テーブル名と列名は、識別子のルールに従っている必要があります。 データベース名と所有者名の指定は省略可能です。

text_ptr
textntext、または image データへのポインターを保存する値です。 text_ptrbinary(16) にする必要があります。テキスト ポインターを作成するには、textntext、または image 列に対して NULL 以外のデータを使用する INSERT ステートメントまたは UPDATE ステートメントを実行します。

WITH LOG
SQL Server では無視されます。 ログ記録は、データベースで有効になっている復旧モデルによって異なります。

data
格納する実際の textntext、または image データです。 data には、リテラルまたはパラメーターを指定することができます。 WRITETEXT を使用して対話的に挿入可能なテキスト長の最大値は、textntext、および image データで約 120 KB です。

注釈

WRITETEXT を使用して textntext、および image データを置き換え、UPDATETEXT を使用して textntext、および image データを変更します。 UPDATETEXT は、textntext、または image 列の全体ではなく一部のみを変更するため柔軟性があります。

最高のパフォーマンスが得られるよう、8,040 バイトの倍数の単位で textntext、および image データを挿入または更新することをお勧めします。

データベース復旧モデルが単純復旧モデルまたは一括ログ復旧モデルである場合は、新しいデータを挿入または追加するときに、WRITETEXT を使用する textntext、および image 操作は最小限しかログに記録されません。

Note

既存の値を更新するときには、最小限のログ記録は使用されません。

WRITETEXT が正しく機能するためには、その列は既に有効なテキスト ポインターを含んでいる必要があります。

テーブルに行内テキストがない場合、SQL Server は、明示的または暗黙的な NULL 値が INSERT によって text 列に挿入されているときに text 列の初期化を省略することによって領域を節約しますが、そのような NULL に対するテキスト ポインターは取得できません。 text 列を初期化して NULL にするには、UPDATE ステートメントを使用します。 テーブルに行内テキストがある場合、テキスト列を初期化して NULL にする必要はなく、常にテキスト ポインターを取得できます。

ODBC SQLPutData 関数は、WRITETEXT に比べ高速で、使用する動的メモリの量も少なくなります。 この関数は、最大 2 GB までの textntext、または image データを挿入できます。

SQL Server では、textntext、または image データへの行内テキスト ポインターが存在しても、無効になる場合があります。 text in row オプションについては、「sp_tableoption (Transact-SQL)」を参照してください。 テキスト ポインターを無効にする方法の詳細については、「sp_invalidate_textptr (Transact-SQL)」を参照してください。

アクセス許可

指定したテーブルの UPDATE 権限が必要です。 UPDATE 権限が転送されるときに、この権限は譲渡できます。

次の例では、テキスト ポインターをローカル変数 @ptrval に置き、WRITETEXT が指す行に @ptrval で新しいテキスト文字列を入れます。

Note

この例を実行するには、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  

参照

データ型 (Transact-SQL)
DECLARE @local_variable (Transact-SQL)
DELETE (Transact-SQL)
SELECT (Transact-SQL)
SET ステートメント (Transact-SQL)
UPDATETEXT (Transact-SQL)