如何在T-SQL中格式化乘法表结果为多列展示?
修改T-SQL存储过程实现乘法表并行排版
现有存储过程dbo.math_tables可以从指定数字开始生成2个乘法表,但当前执行后是按乘法表依次输出。需要修改代码,让两个乘法表的对应行在同一行展示,实现并行排版,提升结果可读性。
原代码
CREATE OR ALTER PROCEDURE dbo.math_tables (@x INT = 1) AS BEGIN DECLARE @y INT = 1 DECLARE @ctr INT = 0 BEGIN WHILE @ctr <= 2 BEGIN WHILE @y <= 10 BEGIN PRINT ltrim(str(@x)) + ' x ' + ltrim(str(@y)) + ' = ' + ltrim(str(@x * @y)) SET @y += 1 END SET @x += 1 SET @y = 1 SET @ctr += 1 PRINT '---------------------------' END END END GO EXECUTE dbo.math_tables 5 /* Starting table */ GO
当前输出
5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 5 x 6 = 30 5 x 7 = 35 5 x 8 = 40 5 x 9 = 45 5 x 10 = 50 --------------------------- 6 x 1 = 6 6 x 2 = 12 6 x 3 = 18 6 x 4 = 24 6 x 5 = 30 6 x 6 = 36 6 x 7 = 42 6 x 8 = 48 6 x 9 = 54 6 x 10 = 60 ---------------------------
期望输出
5 x 1 = 5 6 x 1 = 6 5 x 2 = 10 6 x 2 = 12 5 x 3 = 15 6 x 3 = 18 5 x 4 = 20 6 x 4 = 24 5 x 5 = 25 6 x 5 = 30 5 x 6 = 30 6 x 6 = 36 5 x 7 = 35 6 x 7 = 42 5 x 8 = 40 6 x 8 = 48 5 x 9 = 45 6 x 9 = 54 5 x 10 = 50 6 x 10 = 60
修改后的代码
CREATE OR ALTER PROCEDURE dbo.math_tables (@x INT = 1) AS BEGIN DECLARE @y INT = 1 -- 定义第二个乘法表的起始数字 DECLARE @x2 INT = @x + 1 -- 循环1到10,每次生成两个乘法表的对应行 WHILE @y <= 10 BEGIN -- 使用STR函数指定长度,保证每行内容对齐 PRINT STR(@x, 2) + ' x ' + STR(@y, 2) + ' = ' + STR(@x * @y, 3) + ' ' + STR(@x2, 2) + ' x ' + STR(@y, 2) + ' = ' + STR(@x2 * @y, 3) SET @y += 1 END END GO EXECUTE dbo.math_tables 5 /* Starting table */ GO
代码说明
- 去掉原有的嵌套循环,改为单循环遍历1到10的乘数
@y - 直接计算第二个乘法表的起始数字
@x2 = @x + 1 - 使用
STR(数值, 长度)函数格式化每个部分,让表达式占固定宽度,确保并行排版时对齐整齐 - 每次循环同时拼接两个乘法表的对应行,用空格分隔后打印
内容的提问来源于stack exchange,提问作者Nikhil Govula
相关产品推荐
相关产品推荐

