Error 311 No se puede usar columnas de tipo text,

Denciso acudo a ti por el siguiente tema, estoy intentando actualizar un tabla idéntica ubicada en un servidor remoto. En el trigger insert o update me sale el error "Error 311 No se puede usar columnas de tipo text, ntext o image en tablas insertadas y borrardas"
El código es el siguiente:
CREATE TRIGGER TR_Actualizar ON [dbo].[EmpleadoImagen]
FOR UPDATE
AS
SET REMOTE_PROC_TRANSACTIONS ON
SET XACT_ABORT ON
BEGIN DISTRIBUTED TRAN
UPDATE B
SET B.ContentType = SER.ContentType,
B.Archivo = SER.Archivo,
B.NombreArchivo = SER.NombreArchivo,
FROM INSERTED AS SER,
[PCREMOTA].[BASEBD].[dbo].[EmpleadoImagen] AS B
WHERE B.EmpleadoID = SER.EmpleadoID
IF @@error<>0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
begin
commit transaction
END
Cualquier ayuda o sugerencia desde yá

1 Respuesta

Respuesta
1
Tienes que regresar a la ayuda:
Readtext
TEXTPTR
Writetext
Estas tres opciones de trabajo son lo que requieres...
Hola Denciso nuevamente acudo a uds., perdón por mi ignorancia pero no puedo resolver el tema. Puedo leer la imagen desde el archivo origen pero no puedo pasarla al archivo destino. Los ejemplos del writetext no usan campos imagen, todos los ejemplos son con campos de texto Aquí te adjunto unas prueba que estoy haciendo:
Declare @PtrOrigen Varbinary(16)
Declare @ptrDestino Varbinary(16)
Declare @Imagen varchar(50)
-- Toma puntero imagen del registro
-- Origen
Select @PtrOrigen = TEXTPTR(ARCHIVO) From EMPLEADOIMAGEN Where EMPLEADOID = 863
-- este es el puntero del archivo destino
Select @PtrDestino = TEXTPTR(ARCHIVO) From EMPLEADOIMAGEN Where EMPLEADOID = 864
-- ERROR... Copia el puntero,
-- No el contenido
writetext empleadoimagen.archivo @PtrDestino empleadoimagen.archivo @PtrOrigen
-- Si le pongo este comando tirar error..
writetext empleadoimagen.archivo @PtrDestino empleadoimagen.archivo (ReadText EmpleadoImagen.Archivo @PtrOrigen 0 0)
-- Si le pongo este otro comando tirar error..
writetext empleadoimagen.archivo @PtrDestino empleadoimagen.archivo 'ReadText EmpleadoImagen.Archivo @PtrOrigen 0 0'
-- verifico el resultado
ReadText EmpleadoImagen.Archivo @PtrOrigen 0 0
ReadText EmpleadoImagen.Archivo @PtrDestino 0 0
Cualquier sugerencia será bienvenida, saludos...
Hola David, gracias por contestar, de los links que me pasaste el primero no funciona, por la información que me pasaste ya estuve navegando por la ayuda de transact y no pude resolver mi tema. Resumiendo, lo que necesito es cambiar/actualizar un campo imagen de la misma tabla que esta en otra base de datos de manera de tener una copia fiel en ambos servidores. Y lo ideal sería hacerlo desde un triggers insert y update. Cualquier ayuda o sugerencia serán bienvenida... ;-)
Normalmente lo uso mediante programación de visual basic usando ADO y todo funciona bien, pero puedes checar lo siguiente para ver que puedes hacer en forma directa dentro del sql server:
http://www.solotuweb.com/recursos~t~SQLSERVER~id~12.html
http://www.helpdna.net/sqlserver_faq_11_tipos_datos_text_image.htm
Administrar datos ntext, text e image
Los tipos de datos ntext, ¿text e image de Microsoft® SQL Server? Pueden contener cantidades extremadamente grandes de datos (hasta 2 GB) en un único valor. Normalmente, un valor individual de este tipo de datos es mayor de lo que una aplicación puede recuperar en un paso, ya que algunos valores pueden ser incluso mayores que la memoria virtual disponible en el cliente. Esto significa que, para recuperarlos, normalmente se necesita llevar a cabo procedimientos especiales.
Si un dato de tipo ntext, text e image no es mayor que una cadena Unicode, de caracteres o binaria (4.000 caracteres, 8.000 caracteres y 8.000 bytes, respectivamente), se puede hacer referencia a su valor en las instrucciones SELECT, UPDATE e INSERT casi de la misma forma que se utiliza con los tipos de datos más pequeños. Por ejemplo, se puede hacer referencia a una columna ntext con un valor pequeño en una lista de selección de una instrucción SELECT de la misma forma que se hace referencia a una columna nvarchar. Se deben tener en cuenta algunas restricciones, como, por ejemplo, no poder hacer referencia directamente a una columna ntext, text o image en una cláusula WHERE. Estas columnas se pueden incluir en una cláusula WHERE como parámetros de una función que devuelve otro tipo de datos (como ISNULL, SUBSTRING o PATINDEX) o se encuentra en una expresión IS NULL, IS NOT NULL o LIKE.
Controlar valores de datos mayores
Sin embargo, cuando los valores de datos ntext, text e image son mayores, deben tratarse de bloque en bloque. Tanto Transact-SQL como las API de bases de datos contienen funciones que permiten a las aplicaciones funcionar con los datos ntext, text e image bloque a bloque.
Las API de bases de datos siguen un patrón común en cuanto a la forma en la que tratan las columnas grandes de tipo ntext, text e image.
Para leer una columna con datos de gran tamaño, la aplicación simplemente incluye la columna ntext, text o image en una lista de selección y, a continuación, vincula la columna a una variable de programa que sea suficientemente grande para contener un bloque razonable de los datos. La aplicación ejecuta entonces la instrucción y usa una función o método de la API para recuperar los datos en la variable vinculada, de bloque en bloque.
Para escribir una columna grande, la aplicación ejecuta una instrucción INSERT o UPDATE con un marcador de parámetro (?) En el lugar del valor que se va a colocar en la columna ntext, text o image. El marcador de parámetro (o parámetro, en el caso de ADO) se vincula a una variable de programa suficientemente grande para contener los bloques de datos. La aplicación entra en un bucle donde primero mueve el siguiente conjunto de datos a la variable vinculada y luego llama a una función o método de la API para escribir ese bloque de datos. Esto se repite hasta que se hayan enviado todos los datos.
Utilizar 'text in row'
En Microsoft SQL Server 2000, los usuarios pueden habilitar una opción text in row sobre una tabla, para que pueda almacenar datos de tipo text, ntext o image en su fila de datos.
Para habilitar la opción, ejecute el procedimiento almacenado sp_tableoption y especifique text in row como nombre de la opción y on como valor de la acción. El tamaño máximo predeterminado que se puede almacenar en una fila para un BLOB (objeto binario grande: datos text, ntext o image) es de 256 bytes, pero los valores pueden ir de 24 a 7000. Para especificar un tamaño máximo distinto del predeterminado, especifique un número entero dentro del intervalo de valores de la opción.
Las cadenas text, ntext e image se almacenan en la fila de datos si se cumplen las siguientes condiciones:
La opción text in row está habilitada.
La longitud de la cadena es menor que el límite especificado en @OptionValue.
Hay suficiente espacio disponible en la fila de datos.
Cuando se almacenan cadenas BLOB en la fila de datos, la lectura o escritura de cadenas text, ntext o image puede ser tan rápida como la lectura o escritura de cadenas de caracteres y binarias. SQL Server no tiene acceso a páginas separadas para leer o escribir la cadena BLOB.
Si una cadena text, ntext o image es mayor que el límite especificado o que el espacio que hay disponible en la fila, lo que se almacena en la fila son punteros. Las condiciones para almacenar las cadenas BLOB en la fila siguen siendo válidas aunque: debe haber espacio suficiente para almacenar los punteros en la fila de datos.
Para obtener más información, consulte sp_tableoption.
Utilizar punteros de texto
A menos que se especifique la opción text in row, las cadenas text, ntext e image se almacenan de forma externa a la fila de datos; en las filas de datos sólo residen los punteros para estas cadenas. Los punteros de texto apuntan al nodo raíz de un árbol compuesto de punteros internos, que apuntan a las páginas en las que se almacenan realmente los fragmentos de cadena (de datos text, ntext e image).
Los punteros de texto de fila de SQL Server 2000 son diferentes de los punteros de texto de versiones anteriores de SQL Server. Los punteros de texto de fila se comportan como controladores de archivos para los datos BLOB; los punteros de texto anteriores funcionan como direcciones a los datos BLOB. En consecuencia, cuando utilice punteros de texto de fila deberá tener en cuenta las siguientes características:
Importante Aunque en un cursor se permite texto de fila, no se permite un puntero de texto de fila. SQL Server devolverá un mensaje de error (8654, 16, 1, 'No se pudo generar un plan de cursor para la instrucción dada, porque contiene textptr(inrow lob). ', 1033) si intenta declarar un cursor que contenga un puntero de texto de fila.
Número
Se permite un máximo de 1024 punteros de texto de fila activos por transacción y por base de datos.
Bloqueo
Cuando un usuario obtiene un puntero de texto activo, SQL Server 2000 bloquea la fila de datos y garantiza que ningún otro usuario modifique o elimine la fila mientras el primer usuario tiene el puntero de texto. El bloqueo se libera cuando el puntero de texto deja de ser válido. Para invalidar un puntero de texto, utilice sp_invalidate_textptr.
No se puede utilizar un puntero de texto para actualizar valores BLOB cuando el nivel de aislamiento de la transacción es de lectura no confirmada o cuando la base de datos está en modo de sólo lectura.
SQL Server 2000 no bloquea la fila de datos si la base de datos está en modo de usuario único.
Como ejemplo, dada la tabla siguiente:
CREATE TABLE t1 (c1 int, c2 text)
EXEC sp_tableoption 't1', 'text in row', 'on'
INSERT t1 VALUES ('1', 'a')
La transacción siguiente se completará correctamente:
INSERT t1 VALUES ('1','This is text.')
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
GO
BEGIN TRAN
DECLARE @ptr varbinary(16)
SELECT @ptr = textptr(c2)
FROM t1
WHERE c1 = 1
READTEXT t1.c2 @ptr 0 5
COMMIT TRAN
GO
La transacción siguiente producirá un error:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
GO
BEGIN TRAN
DECLARE @ptr varbinary(16)
SELECT @ptr = textptr(c2)
FROM t1
WHERE c1 = 1
WRITETEXT t1. C2 @ptr 'xx'
Commit Tran
GO
Duración (segundos)
Los punteros de texto de fila sólo son válidos en una transacción. Cuando una transacción se confirma, el puntero de texto deja de ser válido.
Dentro de una transacción, los punteros de texto de fila pueden dejar de ser válidos cuando tienen lugar las acciones siguientes:
La sesión termina.
La fila de datos se elimina en la misma transacción. (Otras transacciones no pueden eliminar una fila de datos debido al bloqueo que se obtiene sobre ella.)
Se cambia el esquema de la tabla en la que reside el puntero de texto. Entre las acciones de cambio de esquema que invalidan los punteros de texto se incluyen: crear o quitar un índice agrupado, alterar o quitar la tabla, truncar la tabla, cambiar la opción text in row mediante sp_tableoption y ejecutar sp_indexoption.
Utilizando el ejemplo anterior, la secuencia de comandos siguiente funcionaría en versiones anteriores de SQL Server, pero generará un error en SQL Server 2000.
DECLARE @ptrval varbinary(16)
PRINT 'get error here'
SELECT @ptrval = TEXTPTR(c2)
FROM t1
WHERE c1 = 1
READTEXT t1. C2 @ptrval 0 1
En SQL Server 2000, el puntero de texto de fila debe utilizarse dentro de una transacción:
Begin tran
DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(c2)
FROM t1
WHERE c1 = 1
READTEXT t1. C2 @ptrval 0 1
Commit
Texto NULL
Puede obtener un puntero de texto de fila para texto NULL generado por INSERT. Anteriormente, sólo era posible obtener punteros de texto después de actualizar de BLOB a NULL.
Por ejemplo, el código siguiente no funciona en SQL Server 7.0, pero sí en SQL Server 2000.
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
INSERT INTO t1 VALUES (4, NULL)
BEGIN TRAN
DECLARE @ptrval VARBINARY(16)
SELECT @ptrval = TEXTPTR(c2)
FROM t1
WHERE c1 = 4
WRITETEXT t1.c2 @ptrval 'x4'
COMMIT
En SQL Server 7.0 debe hacerse lo siguiente:
INSERT INTO t1 VALUES (4, NULL)
UPDATE t1
SET c2 = NULL
WHERE c1 = 4
DECLARE @ptrval VARBINARY(16)
SELECT @ptrval = TEXTPTR(c2)
FROM t1
WHERE c1 = 4
WRITETEXT t1.c2 @ptrval 'x4'
Esta tabla resume las diferencias.
Diferencia Puntero de texto en fila Puntero no de texto en fila
Número Máximo de 1024 activos por transacción y por base de datos. Sin límite.
Bloqueo La fila de datos tiene un bloqueo tipo ES hasta que el puntero deja de ser válido.
No se obtienen bloqueos cuando el estado de la transacción es 'lectura no confirmada' o la base de datos se encuentra en modo de 'usuario único' o 'sólo lectura'.
La fila de datos no se bloquea.
Duración (segundos) Deja de ser válido al final de la transacción o sesión, cuando se elimina una fila o cuando se cambia el esquema de la tabla. Deja de ser válido cuando se elimina la fila.
Texto NULL Puede obtenerse inmediatamente después de insertar el texto NULL. Sólo puede obtenerse después de actualizar.
Utilizar datos ntext, text e image con las API de bases de datos
A continuación se muestra un resumen de la forma en que las API de bases de datos tratan los datos ntext, text e image:
ADO
ADO puede asignar columnas o parámetros ntext, text o image a un objeto Field o Parameter. Use el método GetChunk para recuperar los datos de bloque en bloque, y el método AppendChunk para escribir datos de bloque en bloque. Para obtener más información, consulte Managing Long Data Types.
Ole db
OLE DB usa la interfaz ISequentialStream para admitir los tipos de datos ntext, text e image. El método ISequentialStream::Read lee los datos de gran tamaño de bloque en bloque e ISequentialStream::Write los escribe en la base de datos del mismo modo. Para obtener más información, consulte BLOBs and OLE Objects.
ODBC
ODBC tiene una característica llamada "datos en ejecución" para tratar los tipos de datos ODBC que contienen datos de gran tamaño: SQL_WLONGVARCHAR (ntext), SQL_LONGVARCHAR (text) y SQL_LONGVARBINARY (image). Estos tipos de datos se vinculan a una variable de programa. A continuación, se llama a SQLGetData para recuperar los datos grandes de bloque en bloque y a SQLPutData para enviar los datos grandes de bloque en bloque. Para obtener más información, consulte Managing text and image Columns.
DB-Library
Las aplicaciones de DB-Library también vinculan columnas ntext, text e image a variables de programa. La función dbtxtptr de DB-Library se usa para obtener un puntero a la ubicación de la columna de gran tamaño en la base de datos. Dbreadtext se usa para leer los datos grandes de bloque en bloque. Las funciones como dbwritetext, dbupdatetext y dbmoretext se usan para escribir los datos grandes de bloque en bloque.
Nota No se admite el acceso a texto de fila con DB-Library.
Para obtener más información, consulte Text and Image Functions.
©1988-2000 Microsoft Corporation. Reservados todos los derechos.
Modificar valores ntext, text o image
Puede modificar valores ntext, text o image de las formas siguientes:
Utilizando una API de bases de datos como ADO, OLE DB u ODBC para ejecutar una instrucción UPDATE o INSERT con una variable de programa vinculada a un marcador de parámetro para la columna ntext, text o image. A continuación, llame a las funciones adecuadas de la API de bases de datos para enviar datos grandes a la base de datos de bloque en bloque. DB-Library admite la misma funcionalidad con sus funciones de text e image.
Utilizando la instrucción WRITETEXT para volver a escribir el valor completo de los datos de la columna.
Por ejemplo, en esta consulta se cambia el contenido de la columna pr_info para New Moon Books:
USE pubs
Sp_dboption 'pubs', 'select into/bulkcopy', 'true'
DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr INNER JOIN publishers p
ON p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'
WRITETEXT pub_info. Pr_info @ptrval 'New Moon Books (NMB) '
Sp_dboption 'pubs', 'select into/bulkcopy', 'true'
Utilizando la instrucción UPDATETEXT para actualizar determinados bloques de una columna ntext, text o image.
Por ejemplo, en esta consulta se sustituye el carácter ochenta y ocho de la columna text de New Moon Books (la segunda letra "o" en Moon) por la letra "z":
USE pubs
Sp_dboption 'pubs', 'select into/bulkcopy', 'true'
DECLARE @ptrval varbinary(16)
SELECT @ptrval = TEXTPTR(pr_info)
FROM pub_info pr INNER JOIN publishers p
ON p.pub_id = pr.pub_id
AND p.pub_name = 'New Moon Books'
UPDATETEXT pub_info. Pr_info @ptrval 88 1 'z'
sp_dboption 'pubs', 'select into/bulkcopy', 'false'
Véase también
Writetext
Updatetext
Managing Long Data Types
BLOBs and OLE Objects
Managing text and image Columns
Text and Image Functions
©1988-2000 Microsoft Corporation. Reservados todos los derechos.
Writetext
Permite la actualización interactiva y sin registrar de una columna text, ntext o image existente. Esta instrucción sobrescribe completamente los datos existentes en la columna afectada. No se puede utilizar WRITETEXT en columnas text, ntext e image de vistas.
Sintaxis
WRITETEXT { table.column text_ptr }
[ WITH LOG ] { data }
Argumentos
Table. Column
Es el nombre de la tabla y de la columna text, ntext o image que se va a actualizar. Los nombres de tablas y columnas se deben ajustar a las reglas de los identificadores. Para obtener más información, consulte Utilizar identificadores. La especificación de los nombres de la base de datos y del propietario es opcional.
text_ptr
Se trata de un valor que almacena el puntero que señala a los datos text, ntext o image. El argumento text_ptr debe ser del tipo de datos binary(16). Para crear un puntero de texto, ejecute una instrucción INSERT o UPDATE con datos que no sean NULL (nulos) para la columna text, ntext o image. Para obtener más información sobre cómo crear un puntero de texto, consulte INSERT o UPDATE.
WITH LOG
¿Se pasa por alto en Microsoft® SQL Server? 2000. El registro viene determinado por el modelo de recuperación que se aplica para la base de datos.
Data
Son los datos reales de tipo text, ntext o image que se van a guardar. Data puede ser un literal o una variable. La longitud máxima de texto que se puede insertar interactivamente con WRITETEXT es de 120 KB aproximadamente para datos de tipo text, ntext e image.
Observaciones
Utilice WRITETEXT para reemplazar datos de tipo text, ntext e image, y UPDATETEXT para modificar datos de tipo text, ntext e image. UPDATETEXT es más flexible debido a que cambia sólo una parte de una columna text, ntext o image en lugar de la columna completa.
Si el modelo de recuperación de la base de datos es sencillo o de registro masivo, WRITETEXT se trata de una operación no registrada. Esto significa que los datos de tipo text, ntext o image no se registran cuando se escriben en la base de datos; por tanto, el registro de transacciones no se llena con la gran cantidad de datos que, a menudo, componen estos tipos de datos.
Para que WRITETEXT funcione correctamente, la columna ya debe contener un puntero de texto válido.
Si en la tabla no existe texto de fila, SQL Server ahorra espacio al no inicializar las columnas text cuando se colocan valores nulos explícitos o implícitos en las columnas text con INSERT, y no es posible obtener ningún puntero de texto para estos valores nulos. Para inicializar columnas text a NULL, utilice la instrucción UPDATE. Si en la tabla existe texto de fila, no es necesario inicializar a valores nulos la columna de texto y siempre es posible obtener un puntero de texto.
Las funciones dbwritetext y dbmoretext de Bibliotecas de bases de datos y la función SQLPutData de ODBC son más rápidas y utilizan menos memoria dinámica que WRITETEXT. Estas opciones pueden insertar hasta 2 gigabytes de datos de tipo text, ntext o image.
Es posible encontrar en SQL Server 2000 punteros de texto de fila hacia datos text, ntext, o image, pero pueden no ser válidos. Para obtener más información sobre la opción text in row, consulte sp_tableoption. Para obtener más información sobre cómo invalidar punteros de texto, consulte sp_invalidate_textptr.
Permisos
Los permisos de WRITETEXT son los predeterminados de aquellos usuarios con permisos de SELECT en la tabla especificada. Los permisos se pueden transferir cuando se transfieren los permisos SELECT.
Ejemplos
Este ejemplo coloca el puntero de texto en la variable local @ptrval y, a continuación, WRITETEXT coloca la nueva cadena de texto en la fila a la que señala @ptrval.
USE pubs
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'
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
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'
GO
Véase también
Tipos de datos
DECLARE @local_variable
DELETE
SELECT
SET
UPDATETEXT
©1988-2000 Microsoft Corporation. Reservados todos los derechos.
Actualiza un campo text, ntext o image. Utilice UPDATETEXT sólo para cambiar una parte de una columna text, ntext o image existente. Utilice WRITETEXT para actualizar y sustituir un campo text, ntext o image entero.
Sintaxis
UPDATETEXT { table_name.dest_column_name·dest_text_ptr }
{ NULL | insert_offset }
{ NULL | delete_length }
[WITH LOG]
[ inserted_data
| { table_name.src_column_name·src_text_ptr } ]
Argumentos
table_name.dest_column_name
Es el nombre de la tabla y la columna text, ntext o image que se va a actualizar. Los nombres de las tablas y de las columnas se deben ajustar a las reglas para los identificadores. Para obtener más información, consulte Utilizar identificadores . La especificación de los nombres de la base de datos y del propietario es opcional.
dest_text_ptr
Es el valor de un puntero de texto (devuelto por la función TEXTPTR) que señala los datos text, ntext o image que se deben actualizar. dest_text_ptr debe ser de tipo binary(16).
insert_offset
Es la posición de inicio de la actualización a partir de cero. Para columnas text o image, insert_offset es el número de bytes que se debe omitir desde el principio de la columna existente antes de insertar nuevos datos. Para columnas ntext, insert_offset es el número de caracteres (cada carácter ntext utiliza 2 bytes). Los datos text, ntext o image que empiecen en esta posición de inicio a partir de cero se desplazan a la derecha para dejar espacio a los nuevos datos. Un valor 0 inserta los nuevos datos al principio de los datos existentes. Un valor NULL anexa los nuevos datos al valor de datos existente.
delete_length
Es la longitud de los datos que se debe eliminar de la columna text, ntext o image existente, a partir de la posición insert_offset. El valor delete_length se especifica en bytes para columnas text e image, y en caracteres para columnas ntext. Cada carácter ntext utiliza 2 bytes. Con un valor 0 no se eliminan datos. Con un valor NULL, se eliminan todos los datos desde la posición insert_offset hasta el final de la columna text o image existente.
WITH LOG
¿Se omite en Microsoft® SQL Server? 2000. En esta versión, el registro viene determinado por el modelo de recuperación activo en la base de datos.
inserted_data
Son los datos que se van a insertar en la columna text, ntext o image existente en la ubicación de insert_offset. Es un único valor char, nchar, varchar, nvarchar, binary, varbinary, text, ntext o image. Inserted_data puede ser un literal o una variable.
table_name.src_column_name
Es el nombre de la tabla y de la columna text, ntext o image utilizadas como origen de los datos insertados. Los nombres de las tablas y de las columnas se deben ajustar a las reglas para los identificadores.
src_text_ptr
Es un valor de puntero de texto (devuelto por la función TEXTPTR) que señala a una columna text, ntext o image utilizada como origen de los datos insertados.
Observaciones
Los datos recién insertados pueden ser una constante inserted_data, un nombre de tabla, un nombre de columna o un puntero de texto.
Acción de actualización Parámetros de UPDATETEXT
Para sustituir los datos existentes Especifique un valor de insert_offset que no sea NULL, un valor de delete_length que no sea cero y los datos que se deban insertar.
Para eliminar datos existentes Especifique un valor de insert_offset que no sea NULL y un valor de delete_length que no sea cero. No especifique nuevos datos para la inserción.
Para insertar nuevos datos Especifique el valor insert_offset, una delete_length de 0 y los nuevos datos que se deben insertar.
Es posible encontrar en SQL Server 2000 punteros de texto de fila hacia datos text, ntext, o image, pero pueden no ser válidos. Para obtener más información sobre la opción text in row, consulte sp_tableoption. Para obtener más información sobre cómo invalidar punteros, consulte sp_invalidate_textptr.
Para inicializar columnas text con valores NULL, utilice UPDATETEXT cuando el nivel de compatibilidad sea igual a 65. Si el nivel de compatibilidad es igual a 70, utilice WRITETEXT para inicializar columnas text con NULL; de lo contrario, UPDATETEXT inicializa columnas text con una cadena vacía. Para obtener más información sobre la configuración del nivel de compatibilidad, consulte sp_dbcmptlevel.
Permisos
De forma predeterminada, los permisos de UPDATETEXT corresponden a los usuarios que cuentan con permisos SELECT para la tabla especificada. Los permisos se pueden transferir cuando se transfieren los permisos SELECT.
Ejemplos
En este ejemplo se coloca el puntero de texto en la variable local @ptrval; a continuación, se utiliza UPDATETEXT para actualizar un error de ortografía.
USE pubs
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'
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'
UPDATETEXT pub_info. Pr_info @ptrval 88 1 'b'
GO
EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'
GO
Véase también
Readtext
TEXTPTR
Writetext

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas