sql distinct 不能比較或排序 text、ntext 和 image 數據類型,除非使用 IS NULL 或 LIKE 運算符


有個文章的表
內容是列項,類型是text

我查詢的是內容相同的文章,把其中的一個刪除

select 內容 from 文章 group by 內容 having count(*)>1

查詢ID和題目的時候可以,因為不是text,查詢內容就出現

不能比較或排序 text、ntext 和 image 數據類型,除非使用 IS NULL 或 LIKE 運算符

'''''''''''
--大於8000參考以下
SQL Server 2000專門提供了處理text,ntext,image字段的函數

TEXTPTR
TEXTVALID
ReadText
UPDATETEXT
WriteText
一般作用方法:

寫字段WRITETEXT:
DECLARE @val varbinary(16)
SELECT @val = TEXTPTR(字段名) FROM 表名 where 條件
WRITETEXT 表名.字段名 @val '您的長字符串,一般都是大於8000的,不大於也行'
--說明:第二行加上條件 可以定位當前操作的是哪一條記錄。

修改字段UPDATETEXT:
DECLARE @val varbinary(16)
SELECT @val = TEXTPTR(字段名) FROM 表名 where 條件
UPDATETEXT 表名.字段名 @val 0 NULL '您的長字符串,一般都是大於8000的,不大於也行'
--說明:第二行加上條件 可以定位當前操作的是哪一條記錄,第三條里的0是說這個字段里從第0個字符開始,NULL表示,從0開始到這個字段最后的所有字符刪掉


讀字段READTEXT:
DECLARE @val varbinary(16)
SELECT @val = TEXTPTR(字段名) FROM 表名 where 條件
READTEXT 表名.字段名 @val 0 40000
--說明:第二行加上條件 可以定位當前操作的是哪一條記錄,第三行后兩個參數意為:從第0個字符開始,讀40000個字符。
--您可以覺得這個函數完全沒哈用處,是呀,我就感覺他沒用,讀取嘛,怎么讀都可以讀出來,所以直接讀就可以了。


官方說明:


UPDATETEXT
更新現有 text、ntext 或 image 字段。使用 UPDATETEXT 在適當的位置更改 text、ntext 或 image 列的一部分。使用 WRITETEXT 來更新和替換整個 text、ntext 或 image 字段。

語法
UPDATETEXT { table_name.dest_column_name dest_text_ptr }
{ NULL | insert_offset }
{ NULL | delete_length }
[ WITH LOG ]
[ inserted_data
| { table_name.src_column_name src_text_ptr } ]

參數
table_name.dest_column_name

要更新的表和 text、ntext 或 image 列的名稱。表名和列名必須符合標識符的規則。有關更多信息,請參見使用標識符。指定數據庫名和所有者名是可選的。

dest_text_ptr

指向要更新的 text、ntext 或 image 數據的文本指針的值(由 TEXTPTR 函數返回)。dest_text_ptr 必須為 binary(16)。

insert_offset

以零為基的更新起始位置。對於 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 位置開始到末尾的所有數據。

With Log

在 Microsoft? SQL Server? 2000 中被忽略。在該版本中,日志記錄由數據庫的有效恢復模型決定。

inserted_data

是要插入到現有 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 函數返回)。


WriteText
允許對現有的 text、ntext 或 image 列進行無日志記錄的交互式更新。該語句將徹底重寫受其影響的列中的任何現有數據。WRITETEXT 語句不能用在視圖中的 text、ntext 和 image 列上。

語法
WRITETEXT { table.column text_ptr }
[ WITH LOG ] { data }

參數
Table.Column

要更新的表和 text、ntext 或 image 列的名稱。表名和列名必須符合標識符的規則。有關更多信息,請參見使用標識符。指定數據庫名和所有者名是可選的。

text_ptr

指向 text、ntext 或 image 數據的指針的值。text_ptr 的數據類型必須為 binary(16)。若要創建文本指針,請對 text、ntext 或 image 列用非 NULL 數據執行 INSERT 或 UPDATE 語句。有關創建文本指針的更多信息,請參見 INSERT 或 UPDATE。

With Log

在 Microsoft? SQL Server? 2000 中忽略。日志記錄由數據庫的實際恢復模型決定。

Data

要存儲的實際 text、ntext 或 image 數據。data 可以是字面值,也可以是變量。對於 text、ntext 和 image 數據,可以用 WRITETEXT 交互插入的文本的最大長度大約是 120 KB。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM