SQL引數資料型別text對於replace函式的引數1無效
當執行語句:
update SupplyInfo
set ProdInfo=replace(ProdInfo,'中國總代理','中國指定代理')
where CompanyID=83406
因為列ProdInfo為text型別,即SQL語句中用到replace時若操作列型別為text型別會有MSSQL報錯:引數資料型別text對於replace函式的引數1無效。
原因:對text或ntext型別的資料在查詢中不能進行字串操作。
解決方法:將text當作varchar(實際內容長度低於8000位元組時)或把ntext當作nvarchar(實際內容長度低於4000位元組時)。但是當text欄位內容長度超過8000或ntext欄位內容長度超過4000位元組時多出的位元組會被截斷而忽略掉。這時我們可以使用max型別來解決這個問題。
正確語句如下:
update SupplyInfo
set ProdInfo=replace(cast(ProdInfo as varchar(max)),'中國總代理','中國指定代理')
where CompanyID=83406
附:max型別的介紹
varchar(max)、nvarchar(max) 和 varbinary(max) 統稱為大值資料型別。可以使用大值資料型別來儲存最大為 2^31-1 個位元組的資料。
max 說明符是在Microsoft SQL Server 2005 中引入的。此說明符增強了 varchar、nvarchar 和 varbinary 資料型別的儲存能力。
當 sp_tableoption 儲存過程的 ‘large value types out of row’ 選項設定為 OFF 時,大值型別的行記憶體儲限制為 8000 個位元組。當此選項設定為 ON 時,只在行記憶體儲 16 位元組的根。可查詢參考關於sp_tableoption (Transact-SQL)的內容。
大值資料型別在行為上和與之對應的較小的資料型別 varchar、nvarchar 和 varbinary 相似。這種相似使 SQL Server 能夠更高效地儲存和檢索大型字元、Unicode 和二進位制資料。
因為有了大值資料型別,使一些使用 SQL Server 的方式是使用早期版本的 SQL Server 中的 text、ntext 和 image 資料型別所沒有的。例如,在 SQL Server 2005 中,您可以定義能儲存大量資料(最多可達 2^31 位元組的字元、整數和 Unicode 資料)的變數。可查詢參考關於Transact-SQL 變數的內容。
Transact-SQL 變數示例:
DECLARE @MyURL nvarchar(2000);
set @MyURL=’http://blog.csdn.net/yiyelanxin‘;
下面是大值資料型別和 SQL Server 早期版本(如SQL 2000)中與之對應的資料型別之間的關係。
大值資料型別 早期版本中的 LOB
varchar(max) text*
nvarchar(max) ntext*
varbinary(max) image
SQL Server 6.5 版本的客戶端不支援 ntext 資料型別,因此無法識別 nvarchar(max)。
在SQL 2005中請使用 varchar(max)、nvarchar(max) 和 varbinary(max) 資料型別,而不要使用 text、ntext 和 image 資料型別。
大值資料型別在行為上和與之對應的較小的資料型別 varchar(n)、nvarchar(n) 和 varbinary(n) 相同。下面介紹大值資料型別在某些特定情形下的使用:
遊標
由於可以定義大值資料型別變數,便可以將 FETCH 返回的大值資料型別列中的資料賦給本地變數。可查詢參考關於 FETCH (Transact-SQL)的內容。
使用大值資料型別不影響遊標的強制實施遊標型別轉換用法。
成塊更新
UPDATE 語句現在支援 .WRITE( ) 子句對基礎大值資料列進行部分更新。這類似於 SQL Server 早期版本中所支援的對 text、ntext、image 資料型別的文字指標操作、WRITETEXT 和 UPDATETEX。可查詢參考關於UPDATE (Transact-SQL)的內容。
觸發器
支援對插入的和刪除的表中的大值資料型別列引用上使用 AFTER 觸發器。可查詢參考關於CREATE TRIGGER (Transact-SQL)的內容。
字串函式
內建的可操作字元和二進位制資料的字串函式有所增強,可支援大值資料型別的引數。這些函式包括:
COL_LENGTH
CHARINDEX
PATINDEX
LEN
DATALENGTH
SUBSTRING
相關文章
- 函式引數 引數定義函式型別函式型別
- Python 序列型別以及函式引數型別Python型別函式
- 可變資料型別不能作為python函式的引數資料型別Python函式
- 從建構函式得到引數型別函式型別
- 正規表示式replace()函式第二個引數$&的作用函式
- Java對比有引數和無引數Java
- 解析型別引數型別
- 1分鐘掌握 Python 函式引數Python函式
- 3.3.2 函式的預設引數和佔位引數 函式過載函式
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- ; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: ORA-00909: 引數個數無效SQLExceptionJavaError
- 函式的引數傳遞函式
- 程式中的函式引數函式
- 單據型別引數設定增加自定義引數並透過BOS標準函式呼叫型別函式
- TypeScript 函式可選引數和預設引數TypeScript函式
- Python函式/動態引數/關鍵字引數Python函式
- Java函式泛型List引數,操作泛型元素Java函式泛型
- python---函式引數、變數Python函式變數
- 函式、引數、解構函式
- 函式引數詳解函式
- Python函式的位置引數、關鍵字引數精講Python函式
- 【Scala之旅】型別引數型別
- Javascript函式引數求值——Thunk函式JavaScript函式
- 函式基礎和函式引數函式
- 『無為則無心』Python函式 — 26、Python函式引數的傳遞方式Python函式
- 函式的關鍵字引數函式
- 函式的呼叫方式和引數函式
- 封裝帶引數的函式封裝函式
- python sorted()函式的引數用法Python函式
- 揭秘 Go 中的函式引數Go函式
- 形式引數和返回值型別的對比型別
- Python函式引數總結Python函式
- JavaScript函式傳遞引數JavaScript函式
- 陣列作為函式引數陣列函式
- 函式中引數傳值函式
- ES6函式引數函式
- python函式變長引數Python函式
- PHP 函式可變數量的引數列表PHP函式變數
- Java™ 教程(有界型別引數)Java型別