SQL Server檢索ntext、text和image數(shù)據(jù)類(lèi)型的注意事項(xiàng)
SQL Server檢索數(shù)據(jù)時(shí),根據(jù)不同的數(shù)據(jù)類(lèi)型,SQL Server檢索要注意的問(wèn)題也不一樣,下面就讓我們一起來(lái)了解一下SQL Server檢索ntext、text和image數(shù)據(jù)類(lèi)型的注意事項(xiàng)。
Microsoft® SQL Server™ 的 ntext、text 和 image 數(shù)據(jù)類(lèi)型在單個(gè)值中可以包含非常大的數(shù)據(jù)量(***可達(dá) 2 GB)。單個(gè)數(shù)據(jù)值通常比應(yīng)用程序在一個(gè)步驟中能夠檢索的大;某些值可能還會(huì)大于客戶(hù)端的可用虛擬內(nèi)存。因此,在檢索這些值時(shí),通常需要一些特殊的步驟。
如果 ntext、text 和 image 數(shù)據(jù)值不超過(guò) Unicode 串、字符串或二進(jìn)制串的長(zhǎng)度(分別為 4,000 個(gè)字符、8,000 個(gè)字符和 8,000 個(gè)字節(jié)),就可以在 SELECT、UPDATE 和 INSERT 語(yǔ)句中引用它們,其引用方式與較小的數(shù)據(jù)類(lèi)型相同。例如,包含短值的 ntext 列可以在 SELECT 語(yǔ)句的選擇列表中引用,這與 nvarchar 列的引用方式相同。引用時(shí)必須遵守一些限制,例如不能在 WHERE 子句中直接引用 ntext、text 或 image 列。這些列可以作為返回其它數(shù)據(jù)類(lèi)型(例如 ISNULL、SUBSTRING 或 PATINDEX)的某個(gè)函數(shù)的參數(shù)包含在 WHERE 子句中,也可以包含在 IS NULL、IS NOT NULL 或 LIKE 表達(dá)式中。
處理較大的數(shù)據(jù)值
但是,如果 ntext、text 和 image 數(shù)據(jù)值較大,則必須逐塊處理。Transact-SQL 和數(shù)據(jù)庫(kù) API 均包含使應(yīng)用程序可以逐塊處理 ntext、text 和 image 數(shù)據(jù)的函數(shù)。
數(shù)據(jù)庫(kù) API 按照一種通用的模式處理長(zhǎng) ntext、text 和 image 列:
若要讀取一個(gè)長(zhǎng)列,應(yīng)用程序只需在選擇列表中包含 ntext、text 或 image 列,并將該列綁定到一個(gè)程序變量,該變量應(yīng)足以容納適當(dāng)?shù)臄?shù)據(jù)塊。然后,應(yīng)用程序就可以執(zhí)行該語(yǔ)句,并使用 API 函數(shù)或方法將數(shù)據(jù)逐塊檢索到綁定的變量中。
若要寫(xiě)入一個(gè)長(zhǎng)列,應(yīng)用程序可使用參數(shù)標(biāo)記 (?) 在相應(yīng)位置代替 ntext、text 或 image 列中的值,以執(zhí)行 INSERT 或 UPDATE 語(yǔ)句。參數(shù)標(biāo)記(對(duì) ADO 而言則為參數(shù))被綁定到一個(gè)足以容納數(shù)據(jù)塊的程序變量上。應(yīng)用程序進(jìn)入循環(huán),在循環(huán)中先將下一組數(shù)據(jù)移到綁定的變量中,然后調(diào)用 API 函數(shù)或方法寫(xiě)入數(shù)據(jù)塊。這一過(guò)程將反復(fù)進(jìn)行,直到整個(gè)數(shù)據(jù)值發(fā)送完畢。
使用 text in row
在 Microsoft SQL Server 2000 中,用戶(hù)可以在表上啟用 text in row 選項(xiàng),以使該表能夠在其數(shù)據(jù)行中存儲(chǔ) text、ntext 或 image 數(shù)據(jù)。
若要啟用該選項(xiàng),請(qǐng)執(zhí)行 sp_tableoption 存儲(chǔ)過(guò)程,將 text in row 指定為選項(xiàng)名并將 on 指定為選項(xiàng)值。BLOB(二進(jìn)制大對(duì)象:text、ntext 或 image 數(shù)據(jù))行中可以存儲(chǔ)的默認(rèn)***大小為 256 字節(jié),但是值的范圍可以從 24 到 7000。若要指定默認(rèn)值以外的***大小,請(qǐng)指定該范圍內(nèi)的整數(shù)作為選項(xiàng)值。
如果應(yīng)用下列條件,則將 text、ntext 或 image 字符串存儲(chǔ)在數(shù)據(jù)行中:
啟用 text in row。
字符串的長(zhǎng)度比 @OptionValue 所指定的限制短
數(shù)據(jù)行中有足夠的可用空間。
當(dāng) BLOB 字符串存儲(chǔ)在數(shù)據(jù)行中時(shí),讀取和寫(xiě)入 text、ntext 或 image 字符串可以與讀取或?qū)懭胱址投M(jìn)制字符串一樣快。SQL Server 不必訪(fǎng)問(wèn)單獨(dú)的頁(yè)以讀取或?qū)懭?BLOB 字符串。
如果 text、ntext 或 image 字符串比行中所指定的限制或可用空間大,則將指針存儲(chǔ)在該行中。在行中存儲(chǔ) BLOB 字符串的條件仍然適用,但是:數(shù)據(jù)行中必須有足夠的空間容納指針。
【編輯推薦】
帶您深入了解SQL Server數(shù)據(jù)庫(kù)管理