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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server 2005 'Text,nText,image'資料型別SQLServer資料型別
- MySQL和MSSQL下,text、ntext、image、blob的比較MySql
- JS操作二進位制方法 - blobJS
- PHP 操作 mysql blob 資料型別的欄位PHPMySql資料型別
- java之二進位制與資料型別Java資料型別
- MySQL中TEXT與BLOB欄位型別的區別MySql型別
- mysql BLOB型別 TEXT型別MySql型別
- MySQL 中 blob 和 text 資料型別詳解MySql資料型別
- [Abp vNext 原始碼分析] - 23. 二進位制大物件系統(BLOB)原始碼物件
- C語言02-常量、二進位制、資料型別C語言資料型別
- mssql sqlserver 可以儲存二進位制資料的欄位型別詳解SQLServer型別
- 二進位制或序列
- 二進位制安全_C語言中資料型別C語言資料型別
- 通過配置hibernate方言包+GBase8s jdbc實現clob、blob、text、byte大物件資料型別操作JDBC物件資料型別
- Hibernate、JAVA、SQL對應二進位制、文字、影像物件型別JavaSQL物件型別
- JS的二進位制操作JS
- Mysql BLOB、BLOB與TEXT區別及效能影響、將BLOB型別轉換成VARCHAR型別MySql型別
- 操作Blob型別的方法(zt)型別
- Java二進位制操作指南Java
- 通過二進位制頭識別檔案型別型別
- 大話二進位制,八進位制,十進位制,十六進位制之間的轉換
- 複雜二進位制資料
- SQL Server資料型別BLOBSQLServer資料型別
- 【原創】操作Blob型別的方法型別
- hibernate中blob大2進位制檔案的問題?
- JavaScript 讀寫二進位制資料JavaScript
- oracle對BLOB型別資料的操作與效能問題(轉載)Oracle型別
- SQL Server 中ntext, text, image長度計算 - datalength 函式SQLServer函式
- C#的二進位制檔案操作C#
- mysql的text/blob和行溢位MySql
- Oracle - LOB(大物件資料型別)Oracle物件資料型別
- 關於用二進位制給byte型資料賦值賦值
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 二進位制與二進位制運算
- Java基礎系列-二進位制操作Java
- 檔案操作(二進位制拷貝)
- 物件型介面 / 定製操作型別和欄位物件型別
- 沉思-騰訊 PHP 面試題請寫一個函式來檢查使用者提交的資料是否為整數(不區分資料型別,可以為二進位制、八進位制、十進位制、十六進位制數字)PHP面試題函式資料型別