首页 > 解决方案 > 使用 SQL Server 中的存储过程打印素数到 n

问题描述

DROP PROCEDURE test
GO

CREATE PROCEDURE test
    @Number INTEGER
AS
BEGIN
    SET NOCOUNT ON

    DECLARE @i INT = 1;
    DECLARE @K INT = 1;
    DECLARE @j INT = 0;
    DECLARE @Result NVARCHAR(MAX)

    WHILE(@i <= @Number)
    BEGIN
        WHILE(@K <= @i)
        BEGIN
            IF (@K % @i = 0)
            BEGIN
                SET @j = @j + 1
            END

            SET @k = @k + 1
        END 

        SET @K = 1
        PRINT CONVERT(VARCHAR(10), @i) + 'value has j' + CONVERT(VARCHAR(10), @j)

        IF (@j = 2)
        BEGIN
            SET @Result = '' + CONVERT(VARCHAR(10), @i) + ' & ';
            SELECT @Result 
        END

        SET @j = 0;
        SET @i = @i + 1;
    END

    SET NOCOUNT OFF
END
GO      


EXEC test 15

我不明白这段代码有什么问题。输出应该像

2&3&5&7&11&13

标签: sqlsql-server

解决方案


尝试切换此条件:

From: IF(@K % @i = 0)

To:  IF(@i % @k = 0)

更新:这更正了结果的字符串

Declare   @Number INTEGER = 90

     DECLARE @i int =1;
     DECLARE @K int =1;
     DECLARE @j int =0;
     DECLARE @Result NVARCHAR(MAX) = ''
     WHILE(@i <= @Number)
     BEGIN

           WHILE(@K <= @i)
           BEGIN
                if(@i % @k = 0)
                BEGIN
                     SET @j =@j + 1
                END
                SET @k = @k + 1
           END 
       SET @K=1
       print CONVERT(VARCHAR(10),@i)+'value has j'+CONVERT(VARCHAR(10),@j)
       if(@j = 2)
          BEGIN
               SET @Result= @Result + ''+CONVERT(VARCHAR(10),@i) + ' & ';
          END
       SET @j = 0;
       SET @i=@i+1;

     END

SELECT Left(@Result, Len(@Result)-1) As Result   

2 & 3 & 5 & 7 & 11 & 13 & 17 & 19 & 23 & 29 & 31 & 37 & 41 & 43 & 47 & 53 & 59 & 61 & 67 & 71 & 73 & 79 & 83 & 89 

推荐阅读