UPDATE AskClass
SET AskCount = AskCount + 1
WHERE ClaId IN (                                              
SELECT ClaNavIdList FROM AskClass WHERE ClaId = 7  //这里的ClaNavIdList是字符串他的值是5,6,7   执行时提示类型转换错误
)
如果我这么写就对了:
UPDATE AskClass
SET AskCount = AskCount + 1
WHERE ClaId IN (                                              
SELECT 5,6,7 FROM AskClass WHERE ClaId = 7
)我应如何改??

解决方案 »

  1.   

    说错了 下面的写法是:UPDATE AskClass
    SET AskCount = AskCount + 1
    WHERE ClaId IN (                                              
    5,6,7
    )发生了co匹  错误 不好意思。。
      

  2.   

    claid 和calnvaid类型要一至的。
      

  3.   

    ClaId ClaNavIdList 用数据库管理工具改成相同类型
      

  4.   

    兄弟 这么样试试
    ================
    WHERE ClaId IN (                                              
    SELECT cast(ClaNavIdList as int) FROM AskClass WHERE ClaId = 7
      

  5.   

    楼上两位,请不要误导人家.ClaNavIdList 是 5,6,7字符串, cast(ClaNavIdList as int)转换会报错的
      

  6.   

    如果要解决这个问题可以写个数据库的函数实现
    CREATE FUNCTION f_splitSTR(
    @s   varchar(8000),  
    @split varchar(10)   
    )RETURNS @re TABLE(col int)
    AS
    BEGIN
    DECLARE @t TABLE(ID int IDENTITY,b bit)
    INSERT @t(b) SELECT TOP 8000 0 FROM syscolumns a,syscolumns b INSERT @re SELECT cast(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as int)
    FROM @t
    WHERE ID<=LEN(@s+'a') 
    AND CHARINDEX(@split,@split+@s,ID)=ID
    RETURN
    END
    GO调用的时候
    UPDATE AskClass
    SET AskCount = AskCount + 1
    WHERE ClaId IN (                                              
    SELECT f_splitSTR(ClaNavIdList,",") FROM AskClass WHERE ClaId = 7
    )
      

  7.   

    果然还是要用split函数吗?你说的对  字符串是5,6,7  不能用转型
      

  8.   

    函数前面加个 "dbo" 看看   dbo.f_splitSTR