Condividi tramite


WRITETEXT (Transact-SQL)

Consente di eseguire l'aggiornamento interattivo con registrazione minima di una colonna di tipo text, ntext o image esistente. WRITETEXT sovrascrive completamente tutti i dati esistenti nella colonna interessata. Non è possibile utilizzare WRITETEXT nelle colonne di tipo text, ntext e image di una vista.

Nota importanteImportante

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Utilizzare i tipi di dati per valori di grandi dimensioni e la clausola .WRITE dell'istruzione UPDATE in alternativa.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • table**.**column
    Nome della tabella e della colonna di tipo text, ntext o image da aggiornare. I nomi delle tabelle e delle colonne devono essere conformi alle regole per gli identificatori. I nomi del database e del proprietario sono facoltativi.

  • text_ptr
    Valore che contiene il puntatore nei dati di tipo text, ntext o image. text_ptr deve essere di tipo binary(16). Per creare un puntatore di testo, eseguire un'istruzione INSERT o UPDATE con dati non Null per la colonna di tipo text, ntext o image.

  • WITH LOG
    Argomento ignorato da SQL Server. La registrazione è definita dal modello di recupero attivo nel database.

  • data
    Dati di tipo text, ntext o image effettivi che si desidera archiviare. data può essere un valore letterale o un parametro. La lunghezza massima consentita per il testo che è possibile inserire in modo interattivo tramite WRITETEXT è di circa 120 KB per i dati di tipo text, ntext e image.

Osservazioni

Utilizzare WRITETEXT per sostituire i dati di tipo text, ntext e image e utilizzare UPDATETEXT per modificare i dati di tipo text, ntext e image. UPDATETEXT risulta più flessibile in quanto modifica solo una parte della colonna di tipo text, ntext o image anziché l'intera colonna.

Per ottimizzare le prestazioni, è consigliabile inserire o aggiornare i dati di tipo text, ntext e image in blocchi con dimensioni multiple di 8040 byte.

Se il modello di recupero del database è di tipo semplice o con registrazione minima delle operazioni bulk, le operazioni sui dati di tipo text, ntext e image che utilizzano WRITETEXT saranno operazioni con registrazione minima in caso di inserimento o aggiunta di nuovi dati. Per ulteriori informazioni, vedere Operazioni per cui è possibile eseguire la registrazione minima.

[!NOTA]

La registrazione minima non viene utilizzata in caso di aggiornamento di valori esistenti.

Per consentire la corretta esecuzione di WRITETEXT, è necessario che la colonna includa un puntatore di testo valido.

Se la tabella non include testo all'interno delle righe, SQL Server riduce automaticamente la quantità di spazio utilizzato evitando l'inizializzazione delle colonne di tipo text in corrispondenza dell'aggiunta di valori Null impliciti o espliciti nelle colonne di tipo text tramite l'istruzione INSERT. Per questi valori Null non è più possibile ottenere un puntatore di testo. Per inizializzare le colonne di tipo text per i valori NULL, utilizzare l'istruzione UPDATE. Se la tabella include testo all'interno delle righe, non è necessario inizializzare la colonna di tipo text per i valore Null ed è sempre possibile ottenere un puntatore di testo.

La funzione ODBC SQLPutData risulta più rapida e utilizza una quantità inferiore di memoria dinamica rispetto a WRITETEXT. Questa funzione è in grado di inserire fino a 2 gigabyte di dati di tipo text, ntext o image.

In SQL Server è possibile che esistano puntatori di testo all'interno di righe per dati di tipo text, ntext o image ma che non siano validi. Per ulteriori informazioni sull'opzione TEXT IN ROW, vedere sp_tableoption (Transact-SQL). Per ulteriori informazioni sull'invalidazione dei puntatori di testo, vedere sp_invalidate_textptr (Transact-SQL).

Autorizzazioni

È richiesta l'autorizzazione UPDATE per la tabella specificata. L'autorizzazione è trasferibile in caso di trasferimento dell'autorizzazione UPDATE.

Esempi

Nell'esempio seguente il puntatore di testo viene inserito nella variabile locale @ptrval e quindi WRITETEXT inserisce la nuova stringa di testo nella riga indicata da @ptrval.

[!NOTA]

Per eseguire questo esempio, è necessario installare il database di esempio pubs. Per informazioni sulle procedure di installazione del database di esempio pubs, vedere Download dei database di esempio Northwind e 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