SQL 存储过程 出错: 从数据类型 nvarchar 转换为 float 时出错。

我有一段SQL存储过程代码如下:ALTERPROCEDURE[dbo].[AA]--'在SQL建立名为AA的存储过程@GPDMnvarchar(50),@GPCNnvar... 我有一段SQL 存储过程代码如下:
ALTER PROCEDURE [dbo].[AA] --'在SQL建立名为AA的存储过程
@GPDM nvarchar(50),
@GPCN nvarchar(50),
@BName nvarchar(50),
@Yopen float
AS
BEGIN
declare @sql nvarchar(4000)
set @sql ='insert into ' + @BName + ' (GPDM,GPCN,Yopen) values(''' + @GPDM +''',''' + @GPCN+ ''','+convert(float,@Yopen)+')'
exec(@sql)
END

在执行过程中出错显示:
消息 8114,级别 16,状态 5,过程 AA,第 11 行
从数据类型 nvarchar 转换为 float 时出错。
_______
试过把SQL改成:
set @sql ='insert into ' + @BName + ' (GPDM,GPCN,Yopen) values(''' + @GPDM +''',''' + @GPCN+ ''','+convert(varchar,@Yopen)+')'
---可以通过,但是数据库里没有增加记录,请高手们指教!
展开
 我来答
山水阿锐
2015-06-12 · TA获得超过34.3万个赞
知道顶级答主
回答量:23.7万
采纳率:91%
帮助的人:3.2亿
展开全部
函数用错了
str是 返回从数字数据转换而成的字符数据。而你声明的是nvarchar,并且传入的参数是'41e620ee-b34c-499c-b0e6-fc454583e63f',我想你的意思是想转换成字符型数据吧
将str(@StartNum) 替换成cast (@ChannelID as nvarchar)。
create table #(f float, i int)

declare @f float, @i int, @sql nvarchar(1000)
select @f = 1.3, @i = 13
set @sql = 'insert into # values(@f, '+convert(varchar,@i)+')'
exec sp_executesql @sql, N'@f float', @f

select * from #
/*
f i
---------------------- -----------
1.3 13
*/

drop table #
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式