原帖地址是http://community.csdn.net/Expert/topic/5678/5678397.xml?temp=.177807
 
我的content是text字段的,如果换成varchar图片就插不进去,但是text字段的运行你给的SQL语句会有出错提示:
函数 stuff 的参数 1 的数据类型 text 无效。怎么办呢

解决方案 »

  1.   

    try只要沒超過8000就沒有問題Select id, title, 
    (Case When CharIndex('<img src', content) > 0 Then
    Stuff(content, CharIndex('<img src', content), CharIndex('>', content, CharIndex('<img src', content) + 1) - CharIndex('<img src', content) + 1, '')
    Else content End)  As content From (Select id, title, Cast(content As Varchar) From 留言表 ) A
      

  2.   

    ---鱼老大你的是不是有点小错误啊,LZ好象应该为!!!
    Select id, title, 
    (Case When CharIndex('<img src', content) > 0 Then
    Stuff(content, CharIndex('<img src', content), CharIndex('>', content, 
                   CharIndex('<img src', content) + 1) - CharIndex('<img src', content) + 1, '') Else content End)  As content 
    From (Select id, title, Cast(content As Varchar(8000)) AS content From 留言表 ) A
      

  3.   

    SoftwKLC(自由的飞鸟) ,這裡可以不用指定長度的。我那個是正確的。
      

  4.   

    鱼老大
    如果不指定长度的话,那默认是多大呢? 
    Cast(content As Varchar) 转换后要不要指定列呢?
    请指教...
      

  5.   

    不指定長度,有多長,就轉為多長。Cast(content As Varchar) 转换后要不要指定列呢?----------
    這個沒看懂?“指定列”意思是不是指定列名?在這裡當然需要。
      

  6.   

    暈,只注意8000,沒有注意列名。Select id, title, 
    (Case When CharIndex('<img src', content) > 0 Then
    Stuff(content, CharIndex('<img src', content), CharIndex('>', content, CharIndex('<img src', content) + 1) - CharIndex('<img src', content) + 1, '')
    Else content End)  As content From (Select id, title, Cast(content As Varchar) As content From 留言表 ) A
      

  7.   

    恩,SoftwKLC(自由的飞鸟)那個也可以。 :)
      

  8.   

    用patindex, substring,可以直接對text操作
      

  9.   

    --cast()如果不指定varchar的长度,默认只保留前30个字节create table T (context text)insert into T
    select '啊0123456789-a-0123456789-b-0123456789-c-0123456789-d'select context from Tselect 
          cast(context as varchar) as 默认只保留30个字节,
          len(cast(context as varchar)) as 字符个数,
          datalength(cast(context as varchar))  as 字节数
    from Tdrop table T
      

  10.   

    不轉換類型的寫法Select id, title, 
    (Case When CharIndex('<img src', content) > 0 Then
    Substring(content, 1, CharIndex('<img src', content) - 1)
    + Substring(content, CharIndex('>', content, CharIndex('<img src', content) + 1) + 1, DataLength(content))
    Else content End)  As content From 留言表
      

  11.   

    --創建測試環境
    Create Table 留言表
    (id Int,
     title Varchar(100),
     content Text)
    Insert 留言表 Select 1, 'A', 'ABC<img src="1.jpg" width=xx height=xx>zz'
    Union All Select 2, 'B', 'dsad'
    Union All Select 3, 'C', 'KKK<img src="2.jpg" width=xx height=xx>'
    Union All Select 4, 'D', 'MM<img src="3.jpg" width=xx height=xx>'
    Union All Select 5, 'E', 'KKK'
    GO
    --測試
    Select id, title, 
    (Case When CharIndex('<img src', content) > 0 Then
    Substring(content, 1, CharIndex('<img src', content) - 1)
    + Substring(content, CharIndex('>', content, CharIndex('<img src', content) + 1) + 1, DataLength(content))
    Else content End)  As content From 留言表
    Gop
    --刪除測試環境
    Drop Table 留言表
    --結果
    /*
    id title content
    1 A ABCzz
    2 B dsad
    3 C KKK
    4 D MM
    5 E KKK
    */
      

  12.   

    wangtiecheng(不知不为过,不学就是错!),謝了,之前的理解有問題。之前做了測試,但是沒有測到足夠的長度,所以一直沒有發現問題。
      

  13.   

    不指定長度,有多長,就轉為多長。 鱼你这么说不对啊,你试试
    select cast('1234567890123456789012345678901' as varchar)
    ---------------------------------------------------------
    paoluo(一天到晚游泳的鱼) 
    不指定長度,有多長,就轉為多長。Cast(content As Varchar) 转换后要不要指定列呢?
      

  14.   

    wangtiecheng(不知不为过,不学就是错!) 对cast的理解才是对的
      

  15.   

    如果是连续插入表情符号的话就会出错,比如
    <img src='/images/CustomFaceRecv/1.jpg' width='66' height='66' border=0><img src='/images/CustomFaceRecv/2.jpg' width='66' height='66' border=0><img src='/images/CustomFaceRecv/3.jpg' width='66' height='66' border=0><img src='/images/CustomFaceRecv/4.jpg' width='66' height='66' border=0>出来的时候就出错了
      

  16.   

    就是如果只是插入一个图片的话,用上面的SQL读出来是过滤了的,但是如果是连续的图片,就不能完全过滤了
      

  17.   

    我用的这个测试的
    Select id, title, 
    (Case When CharIndex('<img src', content) > 0 Then
    Substring(content, 1, CharIndex('<img src', content) - 1)
    + Substring(content, CharIndex('>', content, CharIndex('<img src', content) + 1) + 1, DataLength(content))
    Else content End)  As content From 留言表
      

  18.   

    pbyhz(飘并晕乎着) ( ) 信誉:100  2007-07-27 16:44:10  得分: 0  
     
     
       如果是连续插入表情符号的话就会出错,比如
    <img src='/images/CustomFaceRecv/1.jpg' width='66' height='66' border=0><img src='/images/CustomFaceRecv/2.jpg' width='66' height='66' border=0><img src='/images/CustomFaceRecv/3.jpg' width='66' height='66' border=0><img src='/images/CustomFaceRecv/4.jpg' width='66' height='66' border=0>出来的时候就出错了
      
     
    -----------------
    如果有多個的話,就需要寫個函數來處理了。
      

  19.   

    如果是连续插入表情符号的话就会出错,比如
    <img src='/images/CustomFaceRecv/1.jpg' width='66' height='66' border=0>,
    <img src='/images/CustomFaceRecv/2.jpg' width='66' height='66' border=0>,
    <img src='/images/CustomFaceRecv/3.jpg' width='66' height='66' border=0>,
    <img src='/images/CustomFaceRecv/4.jpg' width='66' height='66' border=0>,
    ...
    用函数可以处理多个,但是以上长度最多也不能大于8000
      

  20.   

    如果表中數據的長度不超過8000,還是使用varchar吧。text類型的數據,處理起來太麻煩了。