SQL Server中的文本函數(shù)和圖像函數(shù)介紹
1、查找特定字符串PATINDEX
語法與字符串的patindex一樣。
2、獲取文本指針TEXTPTR
SQLServer在存儲(chǔ)文本類型(ntext、text)和圖像數(shù)據(jù)類型(image)時(shí),默認(rèn)情況是與常見的基本數(shù)據(jù)類型(如char、int等)這樣的數(shù)據(jù)時(shí)單獨(dú)存儲(chǔ)的,也就是說,如果一個(gè)表中的字段有基本類型和圖像文本類型,那么在輸入數(shù)據(jù)時(shí),基本類型和圖像文件數(shù)據(jù)并不是保存在同一個(gè)頁面上,而是分離存儲(chǔ)的。分離存儲(chǔ)后,那么基本類型數(shù)據(jù)和文本圖像類型數(shù)據(jù)所在的頁面就是通過文本指針建立聯(lián)系,是一個(gè)16字節(jié)的二進(jìn)制類型指針。在基本類型數(shù)據(jù)頁面中存儲(chǔ)的就是這些指向數(shù)據(jù)的指針,這樣在需要的時(shí)候通過指針來操作文本和圖像數(shù)據(jù)。Textptr函數(shù)就可以用于獲得文本和圖像數(shù)據(jù)存儲(chǔ)的文本指針,這個(gè)指針獲得后就可以被操作文本和圖像數(shù)據(jù)的函數(shù)(writetext、readtext和updatetext等)進(jìn)行操作。如果沒有有效的指針,文本和圖像函數(shù)是無法操作數(shù)據(jù)的。
語法結(jié)構(gòu):
textptr( column )
這里的column就是表中的文本和圖像數(shù)據(jù)列(text、ntext和image)名稱。
返回值:
varbinary類型16字節(jié)指針。
配合使用的函數(shù):
在編寫含有TEXTPTR函數(shù)的T-SQL代碼時(shí),下表所示的函數(shù)經(jīng)常被使用。
- patindex('%pattern%',expression)
返回字符串在text或ntext列中的字符位置 - datalength(expression)
返回text、ntext和image列中數(shù)據(jù)的長度 - set textsize
- 返回對(duì)select語句所返回的text、ntext或image數(shù)據(jù)的限制(字節(jié)數(shù))。settextsize 0表示不限制。
- substring(text_column,start,length)
返回二進(jìn)制列中又指定的start偏移量和length指定的varchar類型的字符串。字符串的長度硬小于8kb
3、檢測(cè)文本指針是否有效TEXTVALID
textvalid函數(shù)用于檢測(cè)文本指針是否有效。
語法結(jié)構(gòu):
textvalid( 'table.column',text_ptr )
參數(shù)說明:
- table:表的名稱,必須包含
- column:表中的二進(jìn)制數(shù)據(jù)列(text、ntext和image)名稱
- text_ptr:要檢測(cè)的文本指針
返回值:
int,如果指針有效返回1,否則分那會(huì)0。
4、讀取文本圖像列內(nèi)容READTEXT
readtext函數(shù)用于讀取文本或圖像列的內(nèi)容,按照指定的偏移量開始讀取指定字節(jié)數(shù)。如果是圖像列(image),這樣讀取的是字節(jié)數(shù),而不是現(xiàn)實(shí)圖像本身。
語法結(jié)構(gòu):
readtext{ table.column text_ptr offset size } [holdlock]
參數(shù)說明:
- table:表名稱
- column:列名稱
- text_ptr:有效的文本指針,即16字節(jié)的binary數(shù)據(jù)。
- offset:開始讀取text、image類型數(shù)據(jù)之前,要跳過的字節(jié)數(shù)。讀取ntext類型數(shù)據(jù)之前要跳過的字符數(shù)。
- size:讀取的字節(jié)數(shù)(使用text或image數(shù)據(jù)類型時(shí))或字符數(shù)(使用ntext數(shù)據(jù)類型時(shí))。如果size為0,則讀取4KB數(shù)據(jù)。
- holdlock:使文本值被鎖定以進(jìn)行讀取,直到十五結(jié)束為止。其他用戶可以讀取該值,但不能對(duì)其進(jìn)行修改。
返回值:
varchar字符。
5、寫入文本圖像列內(nèi)容WRITETEXT
writetext函數(shù)用于向文本或圖像寫入內(nèi)容,同時(shí)可以選擇為最小日志記錄,這樣寫入操作產(chǎn)生的日志寫的I/O次數(shù)少,對(duì)數(shù)據(jù)庫性能影響小。
語法結(jié)構(gòu):
writetext{ table.column text_ptr } [ with log ] { data }
參數(shù)說明:
- table:表名稱
- column:列名稱
- text_ptr:有效的文本指針,即16字節(jié)的binary數(shù)據(jù)。
- with log:由數(shù)據(jù)庫的恢復(fù)模式來決定writetext操作產(chǎn)生的日志行為。因?yàn)閠ext、ntext、imge類型的數(shù)據(jù)一般情況下都比較大。比如一幅圖片可能上百KB,我們知道一個(gè)數(shù)據(jù)頁面的容量是標(biāo)準(zhǔn)的8KB。所以一幅圖片很可能就需要幾時(shí)個(gè)甚至更多的數(shù)據(jù)頁面,所以writetext操作所產(chǎn)生的I/O次數(shù)是很多的,而過多的I/O次數(shù)將影響數(shù)據(jù)庫的性能。該參數(shù)的引入是交給數(shù)據(jù)庫的恢復(fù)模式來決定的writetext操作將產(chǎn)生的日志行為。當(dāng)數(shù)據(jù)庫公仔在完全恢復(fù)模式時(shí),產(chǎn)生的日志最多,因此對(duì)數(shù)據(jù)庫性能的影響也最大。當(dāng)工作在簡單恢復(fù)模式時(shí),產(chǎn)生的日志最少。
- data:要存儲(chǔ)的text、ntext或image類型的數(shù)據(jù)。writetext以交互方式插入的最大文本長度約為120KB。
6、更新文本圖像列內(nèi)容UPDATETEXT
updatetext函數(shù)更新文本或圖像列中的內(nèi)容。與writetext的區(qū)別在于該函數(shù)可以僅更新列中的一部分,而writetext是更新整個(gè)列。
語法結(jié)構(gòu):
updatetext{ table.name.dest_column_name dest_text_ptr } { null | insert_offset } { with log } { inserted_data | { table.name.src_column_name src_text_ptr } }
參數(shù)說明:
- table_name:表名稱。
- dest_column_name:列名稱。
- dest_text_ptr:有效的文本指針,即16字節(jié)的binary數(shù)據(jù)。
- insert_offset:以0為基礎(chǔ)的更新其實(shí)位置,對(duì)于Text或image列,insert_offset是在插入新數(shù)據(jù)前要從現(xiàn)有列的起點(diǎn)跳過的字節(jié)數(shù)。對(duì)于ntext列,insert_offset是字符數(shù)(每個(gè)ntext字符占用2個(gè)字節(jié))。從此基數(shù)為零的起始點(diǎn)開始的現(xiàn)有text、ntext或image數(shù)據(jù)向右移,為新數(shù)據(jù)留出空間。值為0表示將新數(shù)據(jù)插入現(xiàn)有數(shù)據(jù)的開始處。值為null則將新數(shù)據(jù)追加到享有數(shù)據(jù)值后。
- delete_length:從insert_offset位置開始、要從現(xiàn)有text、ntext、或image列中刪除的數(shù)據(jù)長度。delete_length值對(duì)于text和image列用字節(jié)指定,對(duì)于ntext列用字符指定。每個(gè)ntext字符占用2個(gè)字節(jié)。值為0表示不刪除數(shù)據(jù)。值為null則刪除現(xiàn)有text或image列中從insert_offset位置開始到末尾的所有數(shù)據(jù)。
- withlog:日子記錄由數(shù)據(jù)庫的當(dāng)前模式?jīng)Q定。
- inserted_date:要插入現(xiàn)有text、ntext或image列的insert_offset位置的數(shù)據(jù)。這是單個(gè)char、nchar、varchar、nvarchar、binary、varbinary、text、ntext或image值。inserted_data可以是文字或變量。
- table_name.src_column_name:用作插入數(shù)據(jù)源的表或text、ntext、image列的名稱。
- src_text_ptr:指向用作插入數(shù)據(jù)源的text、ntext或image列的文本指針值,通常使用textptr函數(shù)獲得。
分到此這篇關(guān)于SQL Server文本函數(shù)和圖像函數(shù)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
sqlserver 日志恢復(fù)方法(搞定drop和truncate)
這是一次數(shù)據(jù)恢復(fù)中,我們老大在Sql中敲的,我這里最想記錄的是他優(yōu)良的代碼風(fēng)格.2009-10-10SQL SERVER中關(guān)于exists 和 in的簡單分析
這篇文章主要介紹了SQL SERVER中關(guān)于exists 和 in的簡單分析,需要的朋友可以參考下2014-08-08MyBatis實(shí)踐之動(dòng)態(tài)SQL及關(guān)聯(lián)查詢
MyBatis,大家都知道,半自動(dòng)的ORM框架,原來叫ibatis,后來好像是10年apache軟件基金組織把它托管給了goole code,就重新命名了MyBatis,功能相對(duì)以前更強(qiáng)大了。本文給大家介紹MyBatis實(shí)踐之動(dòng)態(tài)SQL及關(guān)聯(lián)查詢,對(duì)mybatis動(dòng)態(tài)sql相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-03-03MSSQL數(shù)據(jù)庫排序規(guī)則如何更改
更改 SQL Server 2005 實(shí)例的默認(rèn)排序規(guī)則的操作可能會(huì)比較復(fù)雜,本文將提供詳細(xì)的操作步驟,需要了解的朋友可以參考下2012-11-11SQL語句練習(xí)實(shí)例之四 找出促銷活動(dòng)中銷售額最高的職員
你剛在一家服裝銷售公司中找到了一份工作,此時(shí)經(jīng)理要求你根據(jù)數(shù)據(jù)庫中的兩張表得到促銷活動(dòng)銷售額最高的銷售員2011-10-10SQL server服務(wù)顯示遠(yuǎn)程過程調(diào)用失敗的解決方法
這篇文章主要為大家介紹了SQL server服務(wù)顯示遠(yuǎn)程過程調(diào)用失敗的解決方法,還為大家提供了解決SQL SERVER 2008 R2配置管理器出現(xiàn)“遠(yuǎn)程過程調(diào)用失敗”(0x800706be)錯(cuò)誤提示的方案,感興趣的小伙伴們可以參考一下2016-05-05分頁存儲(chǔ)過程(用存儲(chǔ)過程實(shí)現(xiàn)數(shù)據(jù)庫的分頁代碼)
用存儲(chǔ)過程實(shí)現(xiàn)數(shù)據(jù)庫的分頁代碼,加快頁面執(zhí)行速度。具體的大家可以測(cè)試下。2010-06-06遠(yuǎn)程連接SQLSERVER 2000服務(wù)器方法
需求如下:需要遠(yuǎn)程連接外地的SQL Server 2000服務(wù)器。2009-07-07