日期:2014-05-19  浏览次数:20536 次

存储过程调用出错
CREATE   proc   info
@infonum   varchar(20),
@infotable   varchar(20),
@infotype   varchar(20),
@intype   varchar(20),
@infoid   varchar(20)
as
declare   @sql   varchar(100)
set   set   @sql   =   '   select   top   '   +   @infonum   +   '   *   from   '   +   @infotable   +   '   where   '   +   @infotype   +   '   =   ( ' ' '   +   @intype   +   ' ' ')   order   by   '   +   @infoid+   '   desc '
EXEC(@sql)
GO

我这样调用出错
exec   dgdcc_news_info   '10 ', 'news ',datediff(day,   ptime,   getdate()), '1 ', 'ptime '
错误如下:
服务器:   消息   170,级别   15,状态   1,行   1
第   1   行:   'day '   附近有语法错误。
谢谢!

------解决方案--------------------
alter proc info
@infonum varchar(20),
@infotable varchar(20),
@infotype varchar(100), --长度不够
@intype varchar(20),
@infoid varchar(20)
as
declare @sql varchar(100)
--有两个set
set @sql = ' select top ' + @infonum + ' * from ' + @infotable + ' where ' + @infotype + ' = ( ' ' ' + @intype + ' ' ') order by ' + @infoid+ ' desc '
print(@sql)
GO

--1.存储过程名写错
--2.传参数时加引号
exec info '10 ', 'news ', 'datediff(day, ptime, getdate()) ', '1 ', 'ptime '