C#问题 我调用存储过程之后老出现like附近有语法错误
USE[E_Consumption]GOSETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOALTERproc[dbo].[cout]@st...
USE [E_Consumption]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[cout]
@strwhere varchar(1500)=''
as
declare @strSQL varchar(5000) -- 主语句
begin
set @strSQL='select count(*)from P_GoodsConsume where'+@strwhere
end
exec (@strSQL)
存储过程本身是可以执行的 我执行存储过程输入参数 conside like '%55%' 提示like附近有语法错误 展开
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[cout]
@strwhere varchar(1500)=''
as
declare @strSQL varchar(5000) -- 主语句
begin
set @strSQL='select count(*)from P_GoodsConsume where'+@strwhere
end
exec (@strSQL)
存储过程本身是可以执行的 我执行存储过程输入参数 conside like '%55%' 提示like附近有语法错误 展开
3个回答
展开全部
declare @strSQL varchar(5000), @strwhere varchar(100) -- 主语句
set @strwhere = 'name like ''%55%''' --只有这样才能得到正确的执行结果
begin
set @strSQL='select count(*)from P_GoodsConsume where '+ @strwhere
print @strSQL
exec(@strSQL)
end
问题在于你传的参数不对,你按照上面的参数传输过去试试。
追问
我的参数也是手动输入的 所以没有错误 ,你的也不能解决我的问题!@strwhere = N'ConsumeOrder like ''%55%''' 我执行存储过程之后参数是这样
追答
我终于知道你的问题了,你的问题在于你的存储过程创建的时候:
set @strSQL='select count(*)from P_GoodsConsume where'+@strwhere
这里面where 后面少了一个空格。正确的应该是
set @strSQL='select count(*)from P_GoodsConsume where '+@strwhere
因为少了空格,所以你最后执行的时候其实是执行这个东西:
select count(*)from P_GoodsConsume whereconside like '%55%' --少了个空格
正确的是:
select count(*)from P_GoodsConsume where conside like '%55%'
可见,粗心是多么的要不得啊!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以不用直接exec(@strSQL)
你先把这个@strSQL的值获取到,看看构成的SQL语句到底是什么,并且把这句SQL放到查询分析器里执行一下,看看能否执行,再找错误。
你先把这个@strSQL的值获取到,看看构成的SQL语句到底是什么,并且把这句SQL放到查询分析器里执行一下,看看能否执行,再找错误。
更多追问追答
追问
我这个存储过程是可以执行的,
USE [E_Consumption]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[cout]
@strwhere = N'conside like ''%55%'''
SELECT 'Return Value' = @return_value
GO
执行之后出现like附近有语法错误 一行受影响
追答
你看看是不是引号没用对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题可能出在你的引号吧。
set @strSQL='select count(*)from P_GoodsConsume where'+@strwhere
单引号到where就没了。后面的like有出现了一对单引号
追问
我存储过程中有声明@strwhere varchar(1500)=''是存在的 存储过程没有错误提示可以执行,参数有误
追答
存储过程没问题,但是语句有问题。
你在where后面+个空格试试
set @strSQL='select count(*)from P_GoodsConsume where '+@strwhere
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询