sql - 使用 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
解决方案
尝试切换此条件:
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
推荐阅读
- angular - ngx-charts-bubble-chart 响应缓慢
- azure - “AADSTS500113:没有为应用程序注册回复地址”。与 Azure API 管理一起使用时,通过 Azure AD 进行 OAuth 2.0 授权
- ms-access - MS Access 中的近似 Vlookup 函数?
- python - jinja2 模板 .generate() 与 .render() 方法
- python - 如何在不干扰顺序的情况下用另一个相同长度的数组对数组进行加权
- powershell - 如何在powershell中获得文件夹和文件的高级权限?
- reactjs - 默认值在 React Js 中提交为 null
- spring - 将操作集模板的 PUT VS PATCH 设置为默认值
- python - 锁定在 Postgres/SQLAlchemy 上添加具有特定外键 ID 的行
- assembly - 突出显示 MIPS 数据路径中的命令路径