一个非常奇怪的SQL问题,请高手指点一下^^

来源:百度知道 编辑:UC知道 时间:2024/05/21 14:01:23
我在一个SQL存储过程中写了一个非常长的SQL语句,先用print(@sqlstr),然后exec(@sqlstr),
在查询分析器中报错,然后没办法,我把exec(@sqlstr)给注释掉,--@exec(@sqlstr),只使用print(@sqlstr),在查询分析器运行后,然后又把print的结果放到分析器运行了一下,竟然正常,你说怪不怪!!
exec(@sqlstr)错误的信息为:
服务器: 消息 203,级别 16,状态 2,过程 get_rbb,行 34
名称 'select njda.mc+bjda.mc bjmc,sum(sjf)sjf,sum(sjf)xj,null zz,isnull(sum(xf),0) as xf,isnull(sum(zf),0) as zf,isnull(sum(zsf),0) as zsf from jfjl inner join sfda on jfjl.xsh=sfda.id inner join bjda on sfda.bjh=bjda.id inner
join njda on bjda.njh=njda.id where jfrq between '2006/7/4' and '2006-8-5' and
tag='jfjl' and skfs='现金' group by njda.mc+bjda.mc
union all
select njda.mc+bjda.mc bjm...

存储过程的全文为:
ALTER PROCEDURE get_rbb
@fields varchar(500)='',
@strWhere varchar(50)='',
@startdate varchar(20),
@enddate varchar(20)
AS
declare @sqlstr varchar(5000)
declare @skr varchar(20)
SET NOCOUNT ON
if(@s

运行这个试试,前提是@sqlstr要声明成nvarchar类型

exec sp_executesql @sqlstr

EXEC不能直接运行字符串.
@sqlstr为字符串
exec '字符串',你认为可以正常运行吗?
你也可以这样测试
print 'exec'+@sqlstr
结果是什么?你把结果复制到查询分析器.就会遇到同样的问题.

直接运行exec get_rbb

我觉得应该是 像你这样 好象两次执行了sql语句,那个查询分析器本来就是运行sql语句