SQL从数据类型 varchar 转换为 float 时出错

hu0336 2011-03-23 03:14:58
declare @SQL varchar(2000)
declare @Order varchar(50)
declare @Line int
set @Order='U_ID'
set @Line=0
set @SQL = 'select top(10) * from User_View where U_Line=@Line And U_ID NOT IN
(
select top(0) U_ID from Users where U_Line=@Line order by '+str(@Order)+' desc
) order by '+str(@Order)+' desc'
exec(@SQL)


消息 8114,级别 16,状态 5,第 6 行
从数据类型 varchar 转换为 float 时出错。

请问下上面的语句中哪里错啦?
...全文
1825 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
moduofanchen 2011-03-23
  • 打赏
  • 举报
回复
...你是一起执行的 。。还是只执行了。set @SQL = 'select top(10) * from User_View where U_Line=@Line And ……
。。。。。
[Quote=引用 8 楼 hu0336 的回复:]

引用 5 楼 moudy 的回复:
改成

declare @SQL varchar(2000)
declare @Order varchar(50)
declare @Line int
set @Order='U_ID'
set @Line=0
set @SQL = 'select top(10) * from User_View where U_Line=@Line And ……
[/Quote]
int64 2011-03-23
  • 打赏
  • 举报
回复
单引号里面是不能用变量直接这样写的,执行的时候你的变量就是未定义的

要用字符串拼接产生sql语句

例如:@SQL = 'select top(10) * from User_View where U_Line='+@Line+' And U_ID NOT IN
moudy 2011-03-23
  • 打赏
  • 举报
回复
原因见我7楼的回复

declare @SQL varchar(2000)
declare @Order varchar(50)
declare @Line int
set @Order='U_ID'
set @Line=0
set @SQL = 'select top(10) * from User_View where U_Line=@Line And U_ID NOT IN
(
select top(0) U_ID from Users where U_Line='+Convert(varchar(5),@Line)+' order by '+@Order+' desc
) order by '+@Order+' desc'
print(@SQL)
a260881071 2011-03-23
  • 打赏
  • 举报
回复
应该是数据类型有问题。
种草德鲁伊 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hu0336 的回复:]

上面不是声明了么

[/Quote]

http://msdn.microsoft.com/zh-cn/library/ms188001.aspx
hu0336 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 moudy 的回复:]
改成

declare @SQL varchar(2000)
declare @Order varchar(50)
declare @Line int
set @Order='U_ID'
set @Line=0
set @SQL = 'select top(10) * from User_View where U_Line=@Line And U_ID NOT IN
(
sele……
[/Quote]

谢谢,但现在提示:
消息 137,级别 15,状态 2,第 1 行
必须声明标量变量 "@Line"。
消息 137,级别 15,状态 2,第 3 行
必须声明标量变量 "@Line"。
上面不是声明了么
moudy 2011-03-23
  • 打赏
  • 举报
回复
另,楼主还有几个错误

top(0)选出来没数据,你的NOT IN 实际上没意义。
@Line 并没有传到你的SQL语句中去。
格桑花 2011-03-23
  • 打赏
  • 举报
回复
你看下哪个是字符串类型,肯定是=号两边的类型不一样了
moudy 2011-03-23
  • 打赏
  • 举报
回复
改成

declare @SQL varchar(2000)
declare @Order varchar(50)
declare @Line int
set @Order='U_ID'
set @Line=0
set @SQL = 'select top(10) * from User_View where U_Line=@Line And U_ID NOT IN
(
select top(0) U_ID from Users where U_Line=@Line order by '+@Order+' desc
) order by '+@Order+' desc'
exec(@SQL)
种草德鲁伊 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 karascanvas 的回复:]

语句没错,数据类型错了。
[/Quote]

看花眼了,楼主的语句没看懂...
hu0336 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 karascanvas 的回复:]
语句没错,数据类型错了。
[/Quote]
怎么改?
种草德鲁伊 2011-03-23
  • 打赏
  • 举报
回复
语句没错,数据类型错了。
hu0336 2011-03-23
  • 打赏
  • 举报
回复
有没有人?

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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