在工作中我们往往需要存储大于8k的信息到数据库中表的Text,ntext,image 字段中,在数据维护的过程中,可能会出现这样的情况将已经一个位置上的存储信息保存到另外的一个地方。
当数据的大小小于8k时,我们可以用下面的这样的方式
注意 下面的例子使用的表的结构如下:
Photos 表名
字段 数据类型
Photo Image 类型
PersonIdentity varchar(18) 类型 主键
declare @ptrval binary ( 16 ) -- 定义指针
Select @ptrval = TEXTPTR (photo) from Photos where PersonIdentity = ’需要更新信息的人员标识’
-- 设置指针
Declare @InformationForInsert varchar ( 8000 )
Select @InformationForInsert = substring (photo, 0 , 8000 ) from Photos Where PersonIdentity = ’需要提取信息的人员标识’
WRITETEXT Photos.photo @ptrval @InformationForInsert -- 保存信息
Go
这样的方法只能在数据小于8k的情况下使用 注意当大于8k的时候这样的方法就不能用拉
现在我们分析一下,理论上来讲我们需要提供信息包括为存储信息的位置,存储信息的来源,就这两个信息就可以拉。
这么来实现呢
我们可以这样利用
UPDATETEXT来实现。
举例:
declare @ptr_NeedInsert binary ( 16 ) -- 定义指针
declare @Ptr_InsertInformation binary ( 16 ) -- 定义指针
Select @ptr_NeedInsert = TEXTPTR (photo) from Photos where PersonIdentity = ’需要更新信息的人员标识’
-- 设置指针
select @Ptr_InsertInformation = TEXTPTR (photo) from Photos Where PersonIdentity = ’需要提取信息的人员标识’
-- 设置指针
UPDATETEXT Photos.Photo @ptr_NeedInsert 0 null Photos.Photo @Ptr_InsertInformation
Go
UpDateText 的语法如下:
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
} ]
参数
table_name.dest_column_name
指针对应的表名和字段名
dest_text_ptr
需要维护的指针 注意指针的大小必须为 binary(16)类型
insert_offset
插入的位置 : 0 为开始位置
delete_length
删除数据的长度 : 注意当为NUll是为清空原来的数据
inserted_data
是要插入到现有 text、ntext 或 image 列 insert_offset 位置的数据,注意这是可选的 ,插入数据有长度的限制
table_name.src_column_name
用作插入数据源的表或 text、ntext 或 image 列的名称。
src_text_ptr
插入的数据源的指针.