关于exec(@sql)问题求解

zhangliangzlxx 2009-11-02 04:02:15
exec ( 'select sum(JiHua_Count) from JiHua_Msg where'+ @SqlWhere)

执行存储过程时,一直报 “第 1 行: '2009-11-02' 附近有语法错误。 ” 不知道该如何解决?


参数 @SqlWhere 的内容是 IsDelete=0 and ( JiHua_Time between '2009-11-02' and '2009-11-03' )

——————————————————————————————————————————————————————

下面是存储过程:

CREATE PROCEDURE Proc_JiHua_StatSumCount
@SqlWhere varchar(500)
AS

execute ( 'select sum(JiHua_Count) from JiHua_Msg where'+ @SqlWhere)
GO
...全文
124 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
luoyoumou 2009-11-03
  • 打赏
  • 举报
回复
group by 跑哪去了?
luoyoumou 2009-11-03
  • 打赏
  • 举报
回复
exec ( 'select  sum(JiHua_Count) from JiHua_Msg where'''+@SqlWhere+'''')
luoyoumou 2009-11-03
  • 打赏
  • 举报
回复
exec ( 'select  sum(JiHua_Count) from JiHua_Msg where''+@SqlWhere+''')
zhangliangzlxx 2009-11-03
  • 打赏
  • 举报
回复
问题已解决,谢谢楼上各位朋友的解答。小弟在这感激不尽....特别感谢:SQL77 的耐心指导。

最后的SQL语句
exec ( 'select  sum(JiHua_Count) from JiHua_Msg where '+@SqlWhere)



这样所有的问题就解决了....话不多说上分.
kone52 2009-11-03
  • 打赏
  • 举报
回复
mark
hjm4702192 2009-11-02
  • 打赏
  • 举报
回复
不对吧,你是用mssql的数据库吗?它的语法,要在表前面根上数据库名再加一个dbo的,要不然永远会错的
SQL77 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhangliangzlxx 的回复:]
引用 13 楼 sql77 的回复:
引用 12 楼 zhangliangzlxx 的回复:
哎,试了很多次还是不行,我问下 SQL77 在SQL语句里面,如实实现
诸如:
C# codestring sqlWhere= SeletParam(model).Replace("'","''");

把参数@SqlWhere里的 “'” ,替换成 “''”呢?

如果你WHERE 里面是一个话,REPLACE也不行



我现在sqlWhere的值是这样的 C# codestring sqlWhere="IsDelete=0 and ( JiHua_Time between ''2009-11-02'' and ''2009-11-03'')"

但是执行,会报 2009附近有语法错误
[/Quote]
不懂了,C#还不是很懂
zhangliangzlxx 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 sql77 的回复:]
引用 12 楼 zhangliangzlxx 的回复:
哎,试了很多次还是不行,我问下 SQL77 在SQL语句里面,如实实现
诸如:
C# codestring sqlWhere= SeletParam(model).Replace("'","''");

把参数@SqlWhere里的 “'” ,替换成 “''”呢?

如果你WHERE 里面是一个话,REPLACE也不行
[/Quote]


我现在sqlWhere的值是这样的
string sqlWhere="IsDelete=0  and ( JiHua_Time between ''2009-11-02'' and ''2009-11-03'')"


但是执行,会报 2009附近有语法错误
SQL77 2009-11-02
  • 打赏
  • 举报
回复
SET @SqlWhere=REPLACE(@SqlWhere,'''','''''')

具体是这样实现
SQL77 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhangliangzlxx 的回复:]
哎,试了很多次还是不行,我问下 SQL77 在SQL语句里面,如实实现
诸如:
C# codestring sqlWhere= SeletParam(model).Replace("'","''");

把参数@SqlWhere里的 “'” ,替换成 “''”呢?
[/Quote]
如果你WHERE 里面是一个话,REPLACE也不行
zhangliangzlxx 2009-11-02
  • 打赏
  • 举报
回复
哎,试了很多次还是不行,我问下 SQL77 在SQL语句里面,如实实现
诸如:
string sqlWhere = SeletParam(model).Replace("'","''");


把参数@SqlWhere里的 “'” ,替换成 “''”呢?
SQL77 2009-11-02
  • 打赏
  • 举报
回复
new SqlParameter("@SqlWhere",SqlDbType.VarChar,50)


看一下,你这个长度就有点短
zhangliangzlxx 2009-11-02
  • 打赏
  • 举报
回复
问题依旧存在....如各位所说,单单是SQL查询分析器中执行可以的,但是 引用到程序中,还是不行。参数没法传递过去。
bancxc 2009-11-02
  • 打赏
  • 举报
回复
c#里是两个单引号啊
print('select sum(JiHua_Count) from JiHua_Msg where '+ @SqlWhere)出来看看 能不能执行
zhangliangzlxx 2009-11-02
  • 打赏
  • 举报
回复
谢谢各位的回答,我刚试了下。但是我的“参数”是从 C#代码端传进来的,请看...

 
internal string GetStatSumCount(JiHuaInfo model)
{
string sqlWhere = SeletParam(model);
SqlParameter[] parameters = {
new SqlParameter("@SqlWhere",SqlDbType.VarChar,50)
};
parameters[0].Value = sqlWhere;

return RunScalar("Proc_JiHua_StatSumCount", parameters).ToString();
}


private string SeletParam(JiHuaInfo model)
{
string sql = " IsDelete=0 ";//判断是否为删除数据

if (!string.IsNullOrEmpty(model.JiHua_Time1) && !string.IsNullOrEmpty(model.JiHua_Time2))
{
sql += " and ( JiHua_Time between ''" + model.JiHua_Time1 + "'' and ''" + model.JiHua_Time2 + "'') ";

}


CREATE PROCEDURE Proc_JiHua_StatSumCount
@SqlWhere varchar(500)
AS


execute ( 'select sum(JiHua_Count) from JiHua_Msg where '+ @SqlWhere)
GO
SQL77 2009-11-02
  • 打赏
  • 举报
回复


DECLARE @SqlWhere NVARCHAR(400)
SET @SqlWhere='IsDelete=0 and ( JiHua_Time between ''2009-11-02'' and ''2009-11-03'')'
PRINT ( 'select sum(JiHua_Count) from JiHua_Msg where '+ @SqlWhere)
select sum(JiHua_Count) from JiHua_Msg where IsDelete=0 and ( JiHua_Time between '2009-11-02' and '2009-11-03')
SQL77 2009-11-02
  • 打赏
  • 举报
回复


DECLARE @SqlWhere NVARCHAR(400)
SET @SqlWhere='IsDelete=0 and ( JiHua_Time between ''2009-11-02'' and ''2009-11-03'')'
PRINT ( 'select sum(JiHua_Count) from JiHua_Msg where '+ @SqlWhere)

select sum(JiHua_Count) from JiHua_Msg whereIsDelete=0 and ( JiHua_Time between '2009-11-02' and '2009-11-03')


首先WHERE后面少空格,日期在引号里边要两个表一个
jia_guijun 2009-11-02
  • 打赏
  • 举报
回复
将变量@SqlWhere 中的每个 ' 替换为两个 '


例如:

IsDelete=0 and ( JiHua_Time between '2009-11-02' and '2009-11-03' )
替换为:
IsDelete=0 and ( JiHua_Time between ''2009-11-02'' and ''2009-11-03'' )
SQL77 2009-11-02
  • 打赏
  • 举报
回复


DECLARE @SqlWhere NVARCHAR(400)
SET @SqlWhere='IsDelete=0 and ( JiHua_Time between ''2009-11-02'' and ''2009-11-03'')'
PRINT ( 'select sum(JiHua_Count) from JiHua_Msg where '+ @SqlWhere)

select sum(JiHua_Count) from JiHua_Msg whereIsDelete=0 and ( JiHua_Time between '2009-11-02' and '2009-11-03')
sgtzzc 2009-11-02
  • 打赏
  • 举报
回复
print 'select  sum(JiHua_Count) from JiHua_Msg where'+ @SqlWhere 


日期要加引号
加载更多回复(2)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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