将 varchar 值 '1,2,3,4,5,6' 转换为数据类型为 int 的列时发生语法错误

blueice2002 2005-05-08 12:35:57
SELECT ProfileName , ProfileType
FROM t_Profile
where profileID in (
SELECT top 1 ProfileCase
FROM t_EncodeFile
order by EncodeFileID desc
)
其中ProfileCase是字符型
profileID是int型

我这样执行后,出错
将 varchar 值 '1,2,3,4,5,6' 转换为数据类型为 int 的列时发生语法错误。

...全文
196 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
blueice2002 2005-05-08
  • 打赏
  • 举报
回复
DECLARE @str nvarchar(255)
set @str='1,2,3,4,5,6'
SELECT ProfileName , ProfileType
FROM t_Profile
where profileID in ( @str )


我这样执行 也报同样的错误!
minghui000 2005-05-08
  • 打赏
  • 举报
回复
up
blueice2002 2005-05-08
  • 打赏
  • 举报
回复
邹大哥果然厉害。
谢谢 freddy2003兄,把括号加上去了。
freddy2003 2005-05-08
  • 打赏
  • 举报
回复
SELECT ProfileName , ProfileType
FROM t_Profile
where charindex(','+rtrim(profileID)+',',','+(
SELECT top 1 ProfileCase
FROM t_EncodeFile
order by EncodeFileID desc
)+',')>0
631799 2005-05-08
  • 打赏
  • 举报
回复
SELECT ProfileName , ProfileType
FROM t_Profile
where profileID in (
SELECT top 1 replace(ProfileCase,'''','')
FROM t_EncodeFile
order by EncodeFileID desc
)
zjcxc 2005-05-08
  • 打赏
  • 举报
回复
--in子句使用的是表达式列表,表达式列表是由多个表达式组成
--ProfileCase只是表达式列表中的一个表达式,而不是表达式列表,所以错了.

--改为:
SELECT ProfileName , ProfileType
FROM t_Profile
where charindex(','+rtrim(profileID+',',','+(
SELECT top 1 ProfileCase
FROM t_EncodeFile
order by EncodeFileID desc
)+',')>0
blueice2002 2005-05-08
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=2817
blueice2002 2005-05-08
  • 打赏
  • 举报
回复
算了,只好用分离字符串的方法了。
declare @str varchar(300),@id varchar(300),@m int,@n int
set @str='a,b,c,d,e'
set @str=@str + ','
set @m=CHARINDEX(',',@str)
set @n=1
WHILE @m>0
BEGIN
set @id=substring(@str,@n,@m-@n)
print @id
set @n=@m+1
set @m=CHARINDEX(',',@str,@n)
END

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧