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

有关存储过程问题?请大家帮忙。关于显示控制的,新增加一个字段,让他置顶。
公司里自定义的新闻控件,现在新加一个功能。
要改存储过程。
代码如下:
USE   JNews;
GO

IF     EXISTS   (SELECT   *   FROM   sys.objects   WHERE   object_id   =   OBJECT_ID(N '[dbo].[procNews_Add_Show_Control] ')   AND   type   in   (N 'P ',   N 'PC '))
DROP   PROCEDURE   [dbo].[procNews_Add_Show_Control]
GO

CREATE   PROCEDURE   procNews_Add_Show_Control
(
@Sub_System int,                         --   子系统
@Category_ID int,                         --   新闻分类
@News_Code char(16),                         --   新闻编号
@Show_ID int   output,                     --   返回的记录内码
@Ret_Msg nvarchar(255)   output   --   返回信息
)
AS
BEGIN
  DECLARE
@v_i int,
@v_Show_Num int,
@v_Show_ID int

SET   @Show_ID=-1;

IF   NOT   Exists(SELECT   News_Code   FROM   vwNews_Info   WHERE   News_Code=@News_Code)
BEGIN
SET   @Ret_Msg= '不存在指定的新闻编码 ';
RETURN   1;
END

IF   Exists(select   News_Code   FROM   News_Show_Control   WHERE   Sub_System=@Sub_System  
and   Category_ID=@Category_ID   and   News_Code=@News_Code)
BEGIN
SET   @Ret_Msg= '已经存在该新闻编码 ';
RETURN   2;
END

SELECT   @v_Show_Num=Show_Num   FROM   News_Category   WHERE   Category_ID=@Category_ID;
SET   @v_Show_Num=isnull(@v_Show_Num,0);
IF   @v_Show_Num <=0  
BEGIN
SELECT   @Ret_Msg= '该新闻类别显示控制的条目为0 ';
RETURN   3;
END

DECLARE   curNews_Show_Control   CURSOR   FOR
SELECT   Show_ID   FROM   News_Show_Control
WHERE   Sub_System=@Sub_System  
and   Category_ID=@Category_ID
ORDER   BY   List_Order;

SET   @v_i=1;

OPEN   curNews_Show_Control;
FETCH   NEXT   FROM   curNews_Show_Control   INTO   @v_Show_ID;
WHILE(@@FETCH_STATUS   =   0)
BEGIN
IF   @v_i <@v_Show_Num
UPDATE   News_Show_Control   SET   List_Order=@v_i+1   WHERE   Show_ID=@v_Show_ID;
ELSE
DELETE   FROM   News_Show_Control   WHERE   Show_ID=@v_Show_ID;

SET   @v_i=@v_i+1;

FETCH   NEXT   FROM   curNews_Show_Control   INTO   @v_Show_ID;
END;
CLOSE   curNews_Show_Control;
DEALLOCATE   curNews_Show_Control;

INSERT   News_Show_Control(Sub_System,Category_ID,News_Code,List_Order,Create_Time)
VALUES(@Sub_System,@Category_ID,@News_Code,1,getdate());

SET   @Show_ID=SCOPE_IDENTITY();
SET   @Ret_Msg= '执行成功 ';

RETURN   0;
END
GO

主要是改下面的:
其中List_Order   是按照顺序排列的。
希望大家帮忙,谢谢了。。。

------解决方案--------------------
在表中加一个字段,把置顶的贴子设成-1或0不就行了,按升序排列
------解决方案--------------------
...
DECLARE curNews_Show_Control CURSOR FOR
SELECT Show_ID FROM News_Show_