日期:2014-05-18  浏览次数:20483 次

新手 存储过程问题


create   proc   Index_admin_news2
@tiaojian   nvarchar(1000)
as
if   (@tiaojian   !=   ' ')
set   @tiaojian   =   '   and   '+   @tiaojian
select   top   5   News_Title,News_Id,News_Type     from   admin_news     where   news_yn=1   +   @tiaojian   +   order   by   news_id   desc


创建的时候   说  
在关键字   'order '   附近有语法错误。

帮忙看一下

------解决方案--------------------
select top 5 News_Title,News_Id,News_Type from admin_news where news_yn=1 + @tiaojian order by news_id desc
------解决方案--------------------
select top 5 News_Title,News_Id,News_Type from admin_news where news_yn=1

+ @tiaojian
+...
是什么意思啊
------解决方案--------------------
+ @tiaojian + 这样写会有语法错误
anncesky()写的是把语句直接付给@oversql ,在用exec方法执行,
在set @oversql = 'select top 5 News_Title,News_Id,News_Type from admin_news where news_yn=1 ' + @tiaojian + 'order by news_id desc '把语句分成了 'select top 5 News_Title,News_Id,News_Type from admin_news where news_yn=1 ;

@tiaojian ;

order by news_id desc;
三段结合起来才是一个完整的语句,
而你的 select top 5 News_Title,News_Id,News_Type from admin_news where news_yn=1 + @tiaojian + order by news_id desc
就是明显的语法错误了
------解决方案--------------------
对!向上面那样。
------解决方案--------------------

------解决方案--------------------
在SQL里,BEGIN 和 END 相当于C#里的{ 和 }
------解决方案--------------------
学习
------解决方案--------------------
ALTER proc Index_admin_news3
@tiaojian nvarchar(1000)
as
declare @Strsql nvarchar(1000)
declare @Strwhere nvarchar(1000)
if (@tiaojian != ' ')
begin
set @Strwhere = ' and '+ @tiaojian
set @Strsql = 'select top 5 News_Title,News_Id,News_Type from admin_news where news_yn=1 ' + @Strwhere + ' order by news_id desc '
end
else
begin
set @Strsql = '空 '
end

print @Strsql
------解决方案--------------------
!= 应改为 <>
------解决方案--------------------
IF
begin
.......
END
ELSE
begin
.......
END