BLOB(二進位制大物件:text、ntext或image)型別資料的操作
SQL SERVER 2000中,
- 字元型別一般用char和varchar資料型別(短字元型),最長為8000位元組,超過8000個位元組的文字就要使用ntext或者text資料型別來儲存;
- 二進位制型別一般用binary、varbinary ,最長為8 KB,儲超過 8 KB 的可變長度的二進位制資料,如 Microsoft Word 文件、Microsoft Excel 電子表格、包含點陣圖的影像、圖形交換格式 (GIF) 檔案和聯合影像專家組 (JPEG) 檔案,使用image 資料型別來儲存。
- ntext、text 和 image 資料型別在單個值中可以包含非常大的資料量,最大可達 2 GB。
一、下面的函式和語句可以與 ntext、text 或 image 資料一起使用。
函式 | 語句 |
---|---|
DATALENGTH | READTEXT |
PATINDEX | SET TEXTSIZE |
SUBSTRING | UPDATETEXT |
TEXTPTR | WRITETEXT |
TEXTVALID |
二、用法示例
1、替換
--建立資料測試環境
create table #tb(aa text)
insert into #tb select 'abc123abc123,asd'--定義替換的字串
declare @s_str varchar(8000),@d_str varchar(8000)
select @s_str='123', --要替換的字串
@d_str='000' --替換成的字串--字串替換處理
declare @p varbinary(16),@postion int,@rplen int
select @p=textptr(aa),@rplen=len(@s_str),@postion=charindex(@s_str,aa)-1 from #tb
while @postion>0
begin
updatetext #tb.aa @p @postion @rplen @d_str
select @postion=charindex(@s_str,aa)-1 from #tb
end--顯示結果
select * from #tb--刪除資料測試環境
drop table #tb
2、全部替換
DECLARE @ptrval binary(16)
DECLARE @ptrvld int
SELECT @ptrval = TEXTPTR(aa), @ptrvld = TEXTVALID('#tb.aa', TEXTPTR(AA)) FROM #tb WHERE aa like '%資料2%'
-- 一定要加上條件判斷,否則若找不到目標檔案指標下一句SQL就會報錯(很重要!)
if @ptrval is not null and @ptrvld = 1
UPDATETEXT #tb.aa @ptrval 0 null '資料3'
3、在欄位尾新增
--定義新增的的字串
declare @s_str varchar(8000)
select @s_str='*C' --要新增的字串
--字串新增處理
declare @p varbinary(16),@postion int,@rplen int
select @p=textptr(detail) from test where id='001'
updatetext test.detail @p null null @s_str
三、總結
- Text欄位型別不能直接用replace函式來替換,必須用updatetext;
- 欄位比較不能用 where 欄位 = ‘某資料’,可以用like來代替;
- updatetext時,若dest_text_ptr值為NULL時會報錯,需注意。錯誤資訊:向UpdateText 函式傳遞了 NULL textptr(text、ntext 或 image 指標);注意,BLOB列為NULL而所在行不為空時,dest_text_prt為NOT NULL,若BOLB所在行為空,則dest_text_prt為NULL。delete_length必須小於等於欄位總長度,否則報錯:刪除長度
不在可用的 text、ntext 或 image 資料範圍內。 - PATINDEX / CHARINDEX 函式都返回指定模式的開始位置。PATINDEX 可使用萬用字元,而 CHARINDEX 不可以。IS NULL、IS NOT NULL 和 LIKE,這些是 WHERE 子句中對 text / ntext型別有效的僅有的其它比較運算。除此之外,PATINDEX 也可用於 WHERE 子句中;
- 使用 TEXTVALID 來檢查文字指標是否存在。在無有效文字指標時,不能使用 UPDATETEXT、WRITETEXT 或 READTEXT;例,SELECT 'Valid (if 1) Text data'
= TEXTVALID ('pub_info.logo', TEXTPTR(logo)) FROM pub_info WHERE logo like '%hello%'; - LEN只對短字元型有效,對於text/ntext/image型別,則使用DATALENGTH來得到資料長度;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-786254/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JS操作二進位制方法 - blobJS
- PHP 操作 mysql blob 資料型別的欄位PHPMySql資料型別
- java之二進位制與資料型別Java資料型別
- MySQL中TEXT與BLOB欄位型別的區別MySql型別
- [Abp vNext 原始碼分析] - 23. 二進位制大物件系統(BLOB)原始碼物件
- 二進位制安全_C語言中資料型別C語言資料型別
- 通過配置hibernate方言包+GBase8s jdbc實現clob、blob、text、byte大物件資料型別操作JDBC物件資料型別
- MySQL 中 blob 和 text 資料型別詳解MySql資料型別
- C語言02-常量、二進位制、資料型別C語言資料型別
- mssql sqlserver 可以儲存二進位制資料的欄位型別詳解SQLServer型別
- 二進位制或序列
- JS的二進位制操作JS
- Mysql BLOB、BLOB與TEXT區別及效能影響、將BLOB型別轉換成VARCHAR型別MySql型別
- 複雜二進位制資料
- 利用vstruct解析二進位制資料Struct
- JavaScript 讀寫二進位制資料JavaScript
- 檔案操作(二進位制拷貝)
- Java基礎系列-二進位制操作Java
- Python3學習-(基本資料型別+二,八,十,十六進位制+轉換方法)Python資料型別
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 二進位制與二進位制運算
- 你知道二進位制、八進位制、十進位制、十六進位制的區別嗎?它們分別有什麼應用場景?
- Redis中快取二進位制資料Redis快取
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java
- 二進位制,八進位制,十進位制,十六進位制之間的轉換
- 進位制詳解:二進位制、八進位制和十六進位制
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- 資料庫text型別的長度?資料庫型別
- 沉思-騰訊 PHP 面試題請寫一個函式來檢查使用者提交的資料是否為整數(不區分資料型別,可以為二進位制、八進位制、十進位制、十六進位制數字)PHP面試題函式資料型別
- 【JVM】或許,這就是二進位制Class吧JVM
- System.data.sqlclient.sqlexception:將截斷字串或二進位制資料終止SQLclientException字串
- JavaScript 基礎 (二) - 引用資料型別 (物件)JavaScript資料型別物件
- 各個資料庫存二進位制大檔案的效能測試資料庫
- Lazarus中對mysql資料庫Blob型別進行讀寫例子MySql資料庫型別
- 二進位制
- (二進位制)
- Web 前端開發日誌(二):JavaScript 的二進位制操作Web前端JavaScript
- 十進位制——二 (八、十六 )進位制
- JDBC 處理CLob和Blob型別資料JDBC型別