create Procedure dd
@whereStr nvarchar(200),--条件
@orderStr nvarchar(200),--排序
@descStr nvarchar(200)--正序或者倒叙排序
as
declare @sqlstr Nvarchar(4000)
set @SqlStr=N'select * from biao where '+@whereStr+' '+@orderStr+' '+@descStr;
Execute SP_ExecuteSql @SqlStr
这个是存储过程
我执行的时候打印了一下sql语句
是这样的
select * from biao where "列名==1" "order by Id" "desc"
每个传进来的值都带引号 导致sql语句不能执行报错
sql存储过程 sql语句拼接问题 为啥传进去的值带双引号呢
答案:3 悬赏:50 手机版
解决时间 2021-03-08 07:31
- 提问者网友:流星是天使的眼泪
- 2021-03-07 09:30
最佳答案
- 五星知识达人网友:逃夭
- 2021-03-07 10:37
我这里测试可行
alter Procedure dd
@whereStr nvarchar(200)='1=1',--条件
@orderStr nvarchar(200)='order by no',--排序
@descStr nvarchar(200)='desc'--正序或者倒叙排序
as
declare @sqlstr Nvarchar(4000)
set @SqlStr=N'select * from tablea_3 where '+@whereStr+' '+@orderStr+' '+@descStr;
--print @SqlStr
exec (@SqlStr)
--select * from tablea_3
GO
alter Procedure dd
@whereStr nvarchar(200)='1=1',--条件
@orderStr nvarchar(200)='order by no',--排序
@descStr nvarchar(200)='desc'--正序或者倒叙排序
as
declare @sqlstr Nvarchar(4000)
set @SqlStr=N'select * from tablea_3 where '+@whereStr+' '+@orderStr+' '+@descStr;
--print @SqlStr
exec (@SqlStr)
--select * from tablea_3
GO
全部回答
- 1楼网友:何以畏孤独
- 2021-03-07 12:34
loginname指的就是一个变量名<与数据库里的字段匹配>,
而'"+login1.username+"'就是你输入的值,
假如只有单引号,系统会认为变量就是login1.username,
而这个值是固定的,然而我们需要的是一个变量,
所以就得再加一个双引号,
至于‘+’就是连接字符串的意思、、、
- 2楼网友:玩家
- 2021-03-07 11:35
sp_executesql执行语句传入的是参数,execute执行语句是字符。
像你的问题就用:execute(@sqlStr) 而不是Execute SP_ExecuteSql @SqlStr
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯