Compartir a través de


Usar datos text, ntext e image en desencadenadores INSTEAD OF

Las modificaciones de datos pueden afectar a columnas text, ntext e image. En las tablas base, el valor almacenado en columnas text, ntext o image es un puntero de texto que indica las páginas que contienen datos. Para obtener más información, vea Datos consecutivos.

[!NOTA] El uso de datos text, ntext e image sólo está disponible por compatibilidad con versiones anteriores. El almacenamiento preferido para datos de gran tamaño es el uso de tipos de datos varchar(max), nvarchar(max) y varbinary(max). Tanto los desencadenadores AFTER como INSTEAD OF admiten el uso de datos varchar(max), nvarchar(max) y varbinary(max) en las tablas inserted y deleted.

Aunque los desencadenadores AFTER no admiten el uso de datos text, ntext o image en las tablas inserted y deleted, los desencadenadores INSTEAD OF sí lo admiten. Los datos text, ntext e image se almacenan en las tablas inserted y deleted de forma diferente a como se almacenan los datos en las tablas base. Los datos text, ntext e image no se almacenan como una cadena de páginas independiente. En su lugar, se almacenan como una cadena continua dentro de cada fila. Esto significa que no hay punteros de texto para las columnas text, ntext e image en las tablas inserted y deleted. Las funciones TEXTPTR y TEXTVALID y las instrucciones READTEXT, UPDATETEXT y WRITETEXT no son válidas para las columnas text, ntext ni image de las tablas inserted y deleted. No se admiten los demás usos de las columnas text, ntext o image, como hacer referencia a las mismas en listas de selección, condiciones de búsqueda de cláusulas WHERE o funciones SUBSTRING, PATINDEX o CHARINDEX. Las operaciones sobre datos text, ntext o image de los desencadenadores INSTEAD OF se ven afectadas por la opción SET TEXTSIZE actual. Este valor se puede determinar mediante la función @@TEXTSIZE.

El tipo de los datos text, ntext o image almacenados en las tablas inserted y deleted varía en función de la acción desencadenadora (INSERT, UPDATE o DELETE):

  • En las instrucciones INSERT, la tabla inserted contiene los nuevos valores de la columna text, ntext o image. La tabla deleted no tiene filas.
  • En las instrucciones DELETE, la tabla inserted no tiene filas y las filas de la tabla deleted contienen los valores que la columna text, ntext o image tenía antes de iniciar la instrucción DELETE.
  • En las instrucciones UPDATE en las que el valor de text, ntext o image no se ha modificado, las filas de las tablas inserted y deleted contienen los mismos valores para la columna text, ntext o image.
  • En las instrucciones UPDATE en las que el valor de text, ntext o image se ha modificado, la tabla deleted contiene los valores de datos en el estado que tenían antes del inicio de UPDATE y la tabla inserted contiene los datos con las modificaciones especificadas en la cláusula SET.

Si una instrucción INSERT, UPDATE o DELETE modifica muchas filas con valores text, ntext o image grandes, se requiere mucha memoria para contener las copias de los datos text, ntext o image en las tablas inserted y deleted. La copia de estas grandes cantidades de datos también puede reducir el rendimiento. Las instrucciones INSERT, UPDATE y DELETE, que hacen referencia a vistas o tablas que tienen desencadenadores INSTEAD OF, deben modificar una fila cada vez o sólo varias filas a la vez, siempre que sea posible.

Vea también

Conceptos

Usar desencadenadores INSTEAD OF

Ayuda e información

Obtener ayuda sobre SQL Server 2005