MSSQL報(bào)錯(cuò):參數(shù)數(shù)據(jù)類型 text 對(duì)于 replace 函數(shù)的參數(shù)無效的解決辦
來源:易賢網(wǎng) 閱讀:2606 次 日期:2014-05-12 15:10:27
溫馨提示:易賢網(wǎng)小編為您整理了“MSSQL報(bào)錯(cuò):參數(shù)數(shù)據(jù)類型 text 對(duì)于 replace 函數(shù)的參數(shù)無效的解決辦”,方便廣大網(wǎng)友查閱!

在sql中使用replace函數(shù)可以替換某個(gè)字段中的一些內(nèi)容,但是如果字段是text類型那么使用replace函數(shù)就會(huì)報(bào)“參數(shù)數(shù)據(jù)類型text 對(duì)于replace 函數(shù)的參數(shù)1 無效?!?,這個(gè)錯(cuò)誤說明對(duì)text或ntext類型的數(shù)據(jù)在查詢中不能進(jìn)行字符串操作

但是我們可以換一種方法解決這個(gè)問題。下面就來分析下解決辦法。

對(duì)text或ntext類型的數(shù)據(jù)在查詢中不能進(jìn)行字符串操作。這時(shí)用得最多的是把text當(dāng)作varchar(實(shí)際內(nèi)容長度低于8000字節(jié)時(shí))或把ntext當(dāng)作nvarchar(實(shí)際內(nèi)容長度低于4000字節(jié)時(shí))來處理。但是這樣處理也不是非常妥當(dāng)畢竟如果text字段內(nèi)容超過8000了豈不是要被截?cái)嗷蛘吆雎缘簟?/P>

最終找到了一種方法解決了”參數(shù)數(shù)據(jù)類型 text 對(duì)于 replace 函數(shù)的參數(shù) 1 無效”的問題。下面用一個(gè)例子來說明怎么處理的。

語法如下:

代碼如下:

update table set column=replace(cast(column as varchar(max)),'123′,'abc')

解釋:

其中的table 代表表名,column代碼該表中需要替換的列。改語句的作用是把table表中column列中所有出現(xiàn)123的都給替換為abc。

附:max類型的介紹

Microsoft SQL Server 2005 中引入了 max 說明符。此說明符增強(qiáng)了 varchar、nvarchar 和 varbinary 數(shù)據(jù)類型的存儲(chǔ)能力。varchar(max)、nvarchar(max) 和 varbinary(max) 統(tǒng)稱為大值數(shù)據(jù)類型。您可以使用大值數(shù)據(jù)類型來存儲(chǔ)最大為 2^31-1 個(gè)字節(jié)的數(shù)據(jù)。

注意:

當(dāng) sp_tableoption 存儲(chǔ)過程的 ‘large value types out of row' 選項(xiàng)設(shè)置為 OFF 時(shí),大值類型的行內(nèi)存儲(chǔ)限制為 8000 個(gè)字節(jié)。當(dāng)此選項(xiàng)設(shè)置為 ON 時(shí),只在行內(nèi)存儲(chǔ) 16 字節(jié)的根。有關(guān)詳細(xì)信息,請(qǐng)參閱 sp_tableoption (Transact-SQL)。

大值數(shù)據(jù)類型在行為上和與之對(duì)應(yīng)的較小的數(shù)據(jù)類型 varchar、nvarchar 和 varbinary 相似。這種相似使 SQL Server 能夠更高效地存儲(chǔ)和檢索大型字符、Unicode 和二進(jìn)制數(shù)據(jù)。

有了大值數(shù)據(jù)類型,使用 SQL Server 的方式是使用早期版本的 SQL Server 中的 text、ntext 和 image 數(shù)據(jù)類型所不可能具有的。例如,在 SQL Server 2005 中,您可以定義能存儲(chǔ)大量數(shù)據(jù)(最多可達(dá) 2^31 字節(jié)的字符、整數(shù)和 Unicode 數(shù)據(jù))的變量。有關(guān)詳細(xì)信息,請(qǐng)參閱 Transact-SQL 變量。

下表說明了大值數(shù)據(jù)類型和 SQL Server 早期版本中與之對(duì)應(yīng)的數(shù)據(jù)類型之間的關(guān)系。

1.jpg

* SQL Server 6.5 版本的客戶端不支持 ntext 數(shù)據(jù)類型,因此無法識(shí)別 nvarchar(max)。

重要提示:

請(qǐng)使用 varchar(max)、nvarchar(max) 和 varbinary(max) 數(shù)據(jù)類型,而不要使用 text、ntext 和 image 數(shù)據(jù)類型。

大值數(shù)據(jù)類型在行為上和與之對(duì)應(yīng)的較小的數(shù)據(jù)類型 varchar(n)、nvarchar(n) 和 varbinary(n) 相同。下面介紹大值數(shù)據(jù)類型在某些特定情形下的使用:

游標(biāo)由于可以定義大值數(shù)據(jù)類型變量,便可以將 FETCH 返回的大值數(shù)據(jù)類型列中的數(shù)據(jù)賦給本地變量。有關(guān)詳細(xì)信息,請(qǐng)參閱 FETCH (Transact-SQL)。 使用大值數(shù)據(jù)類型不影響游標(biāo)的強(qiáng)制實(shí)施游標(biāo)類型轉(zhuǎn)換用法。

成塊更新 UPDATE 語句現(xiàn)在支持 .WRITE( ) 子句對(duì)基礎(chǔ)大值數(shù)據(jù)列進(jìn)行部分更新。這類似于 SQL Server 早期版本中所支持的對(duì)text、ntext、image 數(shù)據(jù)類型的文本指針操作、WRITETEXT 和 UPDATETEX。有關(guān)詳細(xì)信息,請(qǐng)參閱 UPDATE (Transact-SQL)。觸發(fā)器 支持對(duì)插入的和刪除的表中的大值數(shù)據(jù)類型列引用上使用 AFTER 觸發(fā)器。有關(guān)詳細(xì)信息,請(qǐng)參閱 CREATE TRIGGER (Transact-SQL)。

字符串函數(shù) 內(nèi)置的可操作字符和二進(jìn)制數(shù)據(jù)的字符串函數(shù)有所增強(qiáng),可支持大值數(shù)據(jù)類型的參數(shù)。這些函數(shù)包括:

代碼如下:

COL_LENGTH

CHARINDEX

PATINDEX

LEN

DATALENGTH

SUBSTRING

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看數(shù)據(jù)庫
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)