Select 和CONVERT语句疑问,请帮忙

[复制链接]
查看11 | 回复7 | 2010-3-1 11:19:49 | 显示全部楼层 |阅读模式
我运行了一下语句可总出现错误,具体如下:
--其中参数在之前已经被declare
select @A = A FROM' + @table

+ ' WHERELEFT(code, 1) = ' + LEFT(@incomingcode, 1)

+ ' AND CHARINDEX(LTRIM(RTRIM(code)), ' + @incomingcode+ ') = 1' +


' ORDER BY LEN(code) DESC
然后,
set @Total = @balance / @A + @freetotal

系统错误信息:
Line 32: Incorrect syntax near ' + @table

+ '.
于是我就用下边的代替:

declare @SQL VARCHAR(500)


SELECT @SQL = 'select A FROM ' +

LTRIM(RTRIM(@table)) + ' WHERE LEFT(Code, 1) = ' + LEFT(@incomingcode, 1)

+ ' AND CHARINDEX(LTRIM(RTRIM(Code)), ' + @incomingcode+ ') = 1' +

' ORDER BY LEN(Code) DESC'

EXEC (@SQL)
set @Total = @balance / CAST(@SQL AS float) + @freetotal
系统错误信息:
Msg 8114, Level 16, State 5, Procedure, Line 38
Error converting data type varchar to float.
高手指点
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
不能这样写的,你的sql要拼接起来在
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
类型问题,varchar to float这个提示是说从VARCHAR值转换成FLOAT时出错!你有可能某个字段是VARCHAR值,但在程序中运算的时候SQL需要把这个字段进行FLOAT运算,它自动转换时发现这个值是VARCHAR,所以报错了!你找到这个字段用convert转换即可!
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
谢谢楼上
当我pring @sql时,他只是一行select命令,而我要的是这行select命令的结果,所以他转换的时候是转换的这行语句而不是我要的值。
但是如何得到我要的值?不知解释清楚了没有,希望高手帮忙
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
请用这个系统存储过程sp_executesql
具体格式
decalre @A float--和你@sql中的变量名要相同
declare @sql nvarchar(4000) --必须用nvarchar
exec sp_executesql @sql,N'@A float output',@A output --N必须要写
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
谢谢楼上,这个问题解决了。把后半部分的结果写出来和大家分享:

SELECT @SQL = 'select @A = A FROM' + @table
+ ' WHERE LEFT(code, 1) = ' + LEFT(@incomingcode, 1)
+ ' AND CHARINDEX(LTRIM(RTRIM(code)), ' + @incomingcode+ ') = 1' +
' ORDER BY LEN(code) DESC'

exec sp_executesql @sql,N'@Afloat output',@Aoutput

@Total = @balance / @A + @freetotal
reture
另外,有一个疑问,我这个stored procedure是写个另外一个server读取的,那个SERVER需要其中的 @Total , @balance, @A,我只在stored procedure 最后用了reture,但是如何保证那个server取得了他想要的数值那?
谢谢
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
return 可有可无,不用加也照样行,只要这些参数是output,执行完自然就能被使用,不过对方调用你的存储过程时,必须带相应的输出变量
回复

使用道具 举报

千问 | 2010-3-1 11:19:49 | 显示全部楼层
create proc [MaxTime]
@number varchar(30),
@numbera varchar(30),
@numberb varchar(30)
as
begin

declare @balancefloat

declare @table varchar(20)

declare @freetotal varchar(20)

declare @SQL nvarchar(4000)


declare @A float

declare @Total float

select @balance = balance, @table = table, @freetotal = freetotal

from info where number = @number

SELECT @SQL = 'select @A = A FROM' + @table
+ ' WHERE LEFT(code, 1) = ' + LEFT(@incomingcode, 1)
+ ' AND CHARINDEX(LTRIM(RTRIM(code)), ' + @incomingcode+ ') = 1' +
' ORDER BY LEN(code) DESC'
exec sp_executesql @sql,N'@Afloat output',@Aoutput
@Total = @balance / @A + @freetotal
end
return
想再请教一下,以上的例子,那个SERVER需要其中的 @Total , @balance, @A 的output 值,该如何?
谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行