拼sql报错:“+”附近有语法错误,请教如何解决?

e哥 2017-09-21 09:17:31
--ins是个存储过过程
declare @a0 int;
exec @a0=ins 'Users','13128988001,qin1','Mb,Nm';
declare @a1 int;
exec @a1=ins 'UserInRole',@a0 +'4','Uid,Rid';--这里变量@a0来自于上一个存储过程的结果

...全文
514 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2017-09-25
  • 打赏
  • 举报
回复
@a0=ins --这是存储过程返回值为数字int
declare @a0 nvarchar(max);
exec @a0=ins 'Users','c,d','Mb,Nm';
select @a0;
set @a0=@a0+',23130';	--这一段直接用+,变量为字符串
declare @a1 INT;		--这变量没有再做字符串加减,直接用INT
exec @a1=ins 'UserInRole',@a0,'Uid,Rid';
select @a1;
e哥 2017-09-24
  • 打赏
  • 举报
回复
谢谢大家了 最后改成这样了: declare @a0 nvarchar(max); exec @a0=ins 'Users','c,d','Mb,Nm'; select @a0; set @a0=''+@a0+',23130'; declare @a1 nvarchar(max); exec @a1=ins 'UserInRole',@a0,'Uid,Rid'; select @a1;
OwenZeng_DBA 2017-09-24
  • 打赏
  • 举报
回复
引用 10 楼 QQ154485585 的回复:
谢谢大家了 最后改成这样了: declare @a0 nvarchar(max); exec @a0=ins 'Users','c,d','Mb,Nm'; select @a0; set @a0=''+@a0+',23130'; declare @a1 nvarchar(max); exec @a1=ins 'UserInRole',@a0,'Uid,Rid'; select @a1;
行吧,没有问题就结贴吧
OwenZeng_DBA 2017-09-22
  • 打赏
  • 举报
回复
引用 8 楼 QQ154485585 的回复:
程序只把参数拼成sql,根本不知道@a0的值是多少啊
改下拼接的方法,这样拼接
declare @a0 int;
exec @a0=ins 'Users','13128988001,qin1','Mb,Nm';
DECLARE @b VARCHAR(30)
declare @a1 int;
SET @b=@a0 +'4'
exec @a1=ins 'UserInRole',@b,'Uid,Rid';
OwenZeng_DBA 2017-09-22
  • 打赏
  • 举报
回复
引用 5 楼 QQ154485585 的回复:
[quote=引用 4 楼 xiaoxiangqing 的回复:] 这个要看存储过程是怎么写的?
应用层拼成的: declare @a0 nvarchar(22); exec @a0=ins 'Users','13128988001,qin1','Mb,Nm'; declare @a1 nvarchar(22); exec @a1=ins 'UserInRole',@a1+',4','Uid,Rid'; [/quote] 不行,就修改应用程序吧,让他先在程序中@a1+4,计算出来然后再调用下面的存储过程
e哥 2017-09-22
  • 打赏
  • 举报
回复
程序只把参数拼成sql,根本不知道@a0的值是多少啊
听雨停了 2017-09-22
  • 打赏
  • 举报
回复
引用 5 楼 QQ154485585 的回复:
[quote=引用 4 楼 xiaoxiangqing 的回复:] 这个要看存储过程是怎么写的?
应用层拼成的: declare @a0 nvarchar(22); exec @a0=ins 'Users','13128988001,qin1','Mb,Nm'; declare @a1 nvarchar(22); exec @a1=ins 'UserInRole',@a1+',4','Uid,Rid'; [/quote] 直接在应用程序里给a0加上4得出结果后再传过去
e哥 2017-09-22
  • 打赏
  • 举报
回复
引用 4 楼 xiaoxiangqing 的回复:
这个要看存储过程是怎么写的?
应用层拼成的: declare @a0 nvarchar(22); exec @a0=ins 'Users','13128988001,qin1','Mb,Nm'; declare @a1 nvarchar(22); exec @a1=ins 'UserInRole',@a1+',4','Uid,Rid';
xiaoxiangqing 2017-09-22
  • 打赏
  • 举报
回复
这个要看存储过程是怎么写的?
e哥 2017-09-22
  • 打赏
  • 举报
回复
问题是存储过程的参数都是应用层传进来的
听雨停了 2017-09-21
  • 打赏
  • 举报
回复
DECLARE @a1 INT
--新加这两句就可以了
SET @a0=@a0+'4'
SELECT @a0

EXEC @a1=ins 'UserInRole',@a0,'Uid,Rid';
OwenZeng_DBA 2017-09-21
  • 打赏
  • 举报
回复
你把a0+4单独定义一个变量把

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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