標籤:
文本和映像函數
1、尋找特定字串PATINDEX
文法與字串的patindex一樣。
2、擷取文本指標TEXTPTR
SQLServer在儲存文本類型(ntext、text)和映像資料類型(image)時,預設情況是與常見的基礎資料型別 (Elementary Data Type)(如char、int等)這樣的資料時單獨儲存的,也就是說,如 果一個表中的欄位有基本類型和映像文本類型,那麼,在輸入資料時,基本類型和影像檔資料並不是儲存在同一個頁面上,而是分離儲存的。分離儲存後,那麼基本類型資料和文本映像類型資料所在的頁面就是通過文本指標建立聯絡,是一個16位元組的二進位類型指標。在基本類型資料頁面中儲存的就是這些指向資料的指標,這樣在需要的時候通過指標來操作文本和映像資料。Textptr函數就可以用於獲得文本和映像資料存放區的文本指標,這個指標獲得後就可以被操作文本和映像資料的函數(wrutetext、readtext和updatetext等)進行操作。如果沒有有效指標,文本和映像函數是無法操作資料的。
文法結構:
textptr( column )
這裡的column就是表中的文本和映像資料列(text、ntext和image)名稱。
傳回值:
varbinary類型16位元組指標。
配合使用的函數:
在編寫含有TEXTPTR函數的T-SQL代碼時,下表所示的函數經常被使用。
| 格式 |
說明 |
| patindex(‘%pattern%‘,expression) |
返回字串在text或ntext列中的字元位置 |
| datalength(expression) |
返回text、ntext和image列中資料的長度 |
| set textsize |
返回對select語句所返回的text、ntext或image資料的限制(位元組數)。settextsize 0表示不限制。 |
| substring(text_column,start,length) |
返回二進位列中又指定的start位移量和length指定的varchar類型的字串。字串的長度硬小於8kb |
3、檢測文本指標是否有效TEXTVALID
textvalid函數用於檢測文本指標是否有效。
文法結構:
textvalid( ‘table.column‘,text_ptr )
參數說明:
table:表的名稱,必須包含
column:表中的位元據列(text、ntext和image)名稱
text_ptr:要檢測的文本指標
傳回值:
int,如果指標有效返回1,否則分那會0。
4、讀取文本映像列內容READTEXT
readtext函數用於讀取文本或映像列的內容,按照指定的位移量開始讀取指定位元組數。如果是映像列(image),這樣讀取的是位元組數,而不是現實映像本身。
文法結構:
readtext{ table.column text_ptr offset size } [holdlock]
參數說明:
table:表名稱
column:列名稱
text_ptr:有效文本指標,即16位元組的binary資料。
offset:開始讀取text、image類型資料之前,要跳過的位元組數。讀取ntext類型資料之前要跳過的字元數。
size:讀取的位元組數(使用text或image資料類型時)或字元數(使用ntext資料類型時)。如果size為0,則讀取4KB資料。
holdlock:使文本值被鎖定以進行讀取,直到十五結束為止。其他使用者可以讀取該值,但不能對其進行修改。
傳回值:
varchar字元。
樣本:以後寫
5、寫入文本映像列內容WRITETEXT
writetext函數用於向文本或映像寫入內容,同時可以選擇為最小日誌記錄,這樣寫入操作產生的日誌寫的I/O次數少,對資料庫效能影響小。
文法結構:
writetext{ table.column text_ptr } [ with log ] { data }
參數說明:
table:表名稱
column:列名稱
text_ptr:有效文本指標,即16位元組的binary資料。
with log:由資料庫的復原模式來決定writetext操作產生的日誌行為。因為text、ntext、imge類型的資料一般情況下都比較大。比如一幅圖片可能上百KB,我們知道一個資料頁面的容量是標準的8KB。所以一幅圖片很可能就需要幾時個甚至更多的資料頁面,所以writetext操作所產生的I/O次數是很多的,而過多的I/O次數將影響資料庫的效能。該參數的引入是交給資料庫的復原模式來決定的writetext操作將產生的日誌行為。當資料庫公仔在完全復原模式時,產生的日誌最多,因此對資料庫效能的影響也最大。當工作在簡單復原模式時,產生的日誌最少。
data:要儲存的text、ntext或image類型的資料。writetext以互動方式插入的最大文本長度約為120KB。
6、更新文本映像列內容UPDATETEXT
updatetext函數更新文本或映像列中的內容。與writetext的區別在於該函數可以僅更新列中的一部分,而writetext是更新整個列。
文法結構:
updatetext{ table.name.dest_column_name dest_text_ptr } { null | insert_offset } { with log } { inserted_data | { table.name.src_column_name src_text_ptr } }
文法中的參數說明如下。
table_name:表名稱。
dest_column_name:列名稱。
dest_text_ptr:有效文本指標,即16位元組的binary資料。
insert_offset:以0為基礎的更新其實位置,對於Text或image列,insert_offset是在插入新資料前要從現有列的起點跳過的位元組數。對於ntext列,insert_offset是字元數(每個ntext字元佔用2個位元組)。從此基數為零的起始點開始的現有text、ntext或image資料向右移,為新資料留出空間。值為0表示將新資料插入現有資料的開始處。值為null則將新資料追加到享有資料值後。
delete_length:從insert_offset位置開始、要從現有text、ntext、或image列中刪除的資料長度。delete_length值對於text和image列用位元組指定,對於 ntext列用字元指定。每個ntext字元佔用2個位元組。值為0表示不刪除資料。值為null則刪除現有text或image列中從insert_offset位置開始到末尾的所有資料。
withlog:日子記錄由資料庫的當前模式決定。
inserted_date:要插入現有text、ntext或image列的insert_offset位置的資料。這是單個char、nchar、varchar、nvarchar、binary、varbinary、text、 ntext或image值。inserted_data可以是文字或變數。
table_name.src_column_name:用作插入資料來源的表或text、ntext、image列的名稱。
src_text_ptr:指向用作插入資料來源的text、ntext或image列的文本指標值,通常使用textptr函數獲得。
SQL Server文本和映像函數