在将varchar值转换成数据类型int时失败

问题:就像下面这样createPROCEDURE[dbo].[mytest](@myTablevarchar(100),@myIntint)ASdeclare@strSQ... 问题:就像下面这样
create PROCEDURE [dbo].[mytest]
(
@myTable varchar(100),
@myInt int
)
AS
declare @strSQL varchar(1000);
set @strSQL ='select * from ' + @myTable + ' where id=' + @myInt
exec (@strSQL)
执行:exec mytest 'soft',10
显示错误:消息 245,级别 16,状态 1,过程 mytest,第 8 行
在将 varchar 值 'select * from soft where id=' 转换成数据类型 int 时失败。
这样可以解决: set @strSQL ='select * from ' + @myTable + ' where id=' + cast(@myInt as varchar(10))

但是两个都是int类型的,为什么还要转换?转换的话这不是要浪费性能吗?不转换姓名?怎么解决啊?
展开
 我来答
jelvis
推荐于2017-10-15 · TA获得超过5631个赞
知道大有可为答主
回答量:2480
采纳率:62%
帮助的人:837万
展开全部

对的,要转换一次,将int转换为varchar,因为@strSQL是字符串,你不能直接将字符串跟数值类型拼接在一起,举个简单的例子:

--跟你set @strSQL ='select * from ' + @myTable + ' where id=' + @myInt是一个意思
select 'aaa'+1

这样就报跟你一样的错

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式