WRITETEXT (Transact-SQL)

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

ms186838.note(ja-jp,SQL.90).gif重要 :
この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。代わりに、大きな値のデータ型と UPDATE ステートメントの WRITE 句を使用してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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

引数

  • 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 を使用して対話的に挿入可能なテキスト長の最大値は、text データ、ntext データ、および image データで約 120 KB です。

解説

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

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

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

ms186838.note(ja-jp,SQL.90).gifメモ :
既存の値を更新するときには、最小限のログ記録は使用されません。

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 に置き、@ptrval が指す行に WRITETEXT で新しいテキスト文字列を入れます。

ms186838.note(ja-jp,SQL.90).gifメモ :
この例を実行するには、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

参照

関連項目

データ型 (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
DELETE (Transact-SQL)
SELECT (Transact-SQL)
SET (Transact-SQL)
UPDATETEXT (Transact-SQL)

その他の技術情報

大きな値のデータ型の使用

ヘルプおよび情報

SQL Server 2005 の参考資料の入手