在工作中我們往往需要儲存大於8k的資訊到資料庫中表的Text,ntext,image 欄位中,在資料維護的過程中,可能會出現這樣的情況將已經一個位置上的儲存資訊儲存到另外的一個地方。
當資料的大小小於8k時,我們可以用下面的這樣的方式
注意 下面的例子使用的表的結構如下:
Photos 表名
欄位 資料類型
Photo Image 類型
PersonIdentity varchar(18) 類型 主鍵
Go
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來實現。
舉例:
Go
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
插入的資料來源的指標.
原創請勿轉載 --小徐 20070205 下午