116 - Tipo de dato text - ntext e image (escribir) |
Una librería almacena los datos de sus libros en una tabla llamada "libros".
Eliminamos la tabla, si existe:
if object_id('libros') is not null drop table libros;
Creamos la tabla con la siguiente estructura:
create table libros( codigo int identity, titulo varchar(40), autor varchar(30), editorial varchar(20), sinopsis text );
Ingresamos algunos registros:
insert into libros values ('Ilusiones','Richard Bach','Planeta',null); insert into libros values ('Aprenda PHP','Mario Molina','Nuevo Siglo', 'Contiene todos los temas necesarios para el aprendizaje de PHP'); insert into libros (titulo,autor,editorial) values ('Uno','Richard Bach','Planeta'); insert into libros values ('El Aleph','Borges','Emece','Uno de los libros más célebres de este autor.');
Colocamos el puntero a texto del campo "sinopsis" del registro con código 2 en una variable "@puntero" y luego "writetext" almacena el nuevo texto en el registro apuntado por "@puntero":
declare @puntero binary(16) select @puntero = textptr (sinopsis) from libros where codigo=2 writetext libros.sinopsis @puntero 'Este es un nuevo libro acerca de PHP escrito por el profesor Molina que aborda todos los temas necesarios para el aprendizaje desde cero de este lenguaje.';
Leemos el campo "sinopsis" del libro cuyo código es 2, para ver si se actualizó:
declare @puntero binary(16) select @puntero = textptr (sinopsis) from libros where codigo=2 readtext libros.sinopsis @puntero 0 0;
Si intentamos actualizar un campo "text", "ntext" o "image" que tiene valor nulo o un puntero inválido, aparece un mensaje de error, por lo tanto, en el siguiente ejemplo, verificamos si el puntero es válido antes de pasárselo a la función "writetext":
declare @puntero varbinary(16) select @puntero=textptr(sinopsis) from libros where codigo=1 if (textvalid('libros.sinopsis', @puntero)=1) writetext libros.sinopsis @puntero 'Trata de una gaviota que vuela más alto que las demás.' else select 'puntero invalido, no se actualizó el registro';
Para crear un puntero válido debemos ingresar un valor con "insert" o "update":
update libros set sinopsis='xx' where codigo=1;
Ahora si podemos actualizar el campo "sinopsis" del registro con código 1 con "writetext" porque ya tiene un puntero válido:
declare @puntero varbinary(16) select @puntero=textptr(sinopsis) from libros where codigo=1 if (textvalid('libros.sinopsis', @puntero)=1) writetext libros.sinopsis @puntero 'Trata de una gaviota que vuela más alto que las demás.' else select 'puntero invalido, no se actualizó el registro';
Veamos si se actualizó:
declare @puntero binary(16) select @puntero = textptr (sinopsis) from libros where codigo=1 readtext libros.sinopsis @puntero 0 0;
Creamos un puntero válido al ingresar un nuevo registro:
insert into libros values('Alicia en el pais de las maravillas','Lewis Carroll','Planeta','');
Note que ingresamos una cadena vacía para el campo "sinopsis", con ello creamos un puntero válido.
Actualizamos el campo "sinopsis" del último registro ingresado con "writetext":
declare @puntero varbinary(16) select @puntero=textptr(sinopsis) from libros where codigo=5 if (textvalid('libros.sinopsis', @puntero)=1) writetext libros.sinopsis @puntero 'Trata de las aventuras de una niña en un país muy extraño.' else select 'puntero invalido, no se actualizó el registro';
Veamos si se actualizó:
declare @puntero binary(16) select @puntero = textptr (sinopsis) from libros where codigo=5 readtext libros.sinopsis @puntero 0 0;