繁体   English   中英

SQL-带While语句的存储过程

[英]Sql - Stored Procedure with While statement

我正在尝试使用存储过程更新一些列值:

CREATE PROCEDURE [dbo].[UpdataObjectivesPosition] 
@idGoal int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @count int 
    SET @count = 1

    WHILE exists (SELECT * From Objective Where IDgoal = @idGoal)
    Begin
      Update [Tasks] Set Position=@count
      SET @count = @count + 1
    End
 END
 GO

但是我遇到了一个无限循环,我认为这是因为while表达。 那么如何正确创建此过程? 请帮我

例:

姓名职位

tskA-4

tskB-5

tskc-7

我希望程序将位置设置为1,2,3 ......

您根本不需要循环即可实现所需的功能,可以使用ROW_NUMBER()函数来完成此操作:

WITH CTE AS
(   SELECT  *, rn = ROW_NUMBER() OVER(ORDER BY Name)
    FROM    Tasks
)
UPDATE  CTE
SET     Position = rn;

SQL小提琴示例

这是我最近发现的一个SQL Server解决方案。

DECLARE    @Count    INT = ( 
    SELECT  ISNULL(MAX([Position]),0) 
    FROM    [Objective] 
    )

UPDATE [Objective] 
SET     @Count = [Position] = @Count + 1
WHERE  [Position] IS NULL 

它使用双重分配( SET @a = @b = @a + 1 )。

SQLFiddle

欲获得更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM