Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在while循环中的同一行中打印sqlserver中的字符_Sql_Sql Server_Database_While Loop - Fatal编程技术网

在while循环中的同一行中打印sqlserver中的字符

在while循环中的同一行中打印sqlserver中的字符,sql,sql-server,database,while-loop,Sql,Sql Server,Database,While Loop,我需要生产 * ** *** **** ***** 作为sql server中的输出 DECLARE @x INT ; DECLARE @y INT ; SET @x = 1; set @y=0; while @x <=5 begin while @y<@x begin print('*') set @y=@y+1 end print ''+char(1) set @y=0; set @x=@x+1 en

我需要生产

*    
**     
***    
****    
*****    
作为sql server中的输出

DECLARE @x INT ;
DECLARE @y INT ;

SET @x = 1;
set @y=0;

while @x <=5
begin
while @y<@x
    begin
    print('*')
    set @y=@y+1
    end
print ''+char(1)
set @y=0;
set @x=@x+1
end

但是我不能在同一行中打印*每个*在单独的行中打印

您可以创建一个变量,并用您想要打印的内容填充它,然后在所有循环之后打印它

请参阅下面的代码,我注释掉了您的打印,并使用了变量

DECLARE @x INT ;
DECLARE @y INT ;
DECLARE @ValueToPrint VARCHAR(MAX) = ''

SET @x = 1;
set @y=0;

while @x <=5
    begin
        WHILE @y<@x
            BEGIN
                SET @ValueToPrint += '*'
                --print('*')
                SET @y=@y+1
            END


        SET @ValueToPrint += ''+char(1)
        --PRINT ''+char(1)
        -- maybe you want to print it here, if so print the variable here if so uncomment these 2 lines
        -- PRINT @ValueToPrint
        -- SET @ValueToPrint = ''

        SET @y=0;
        SET @x=@x+1
    END

PRINT @ValueToPrint

这看起来像是一个愚蠢的内部循环,你可以这样做:

print replicate('*', 5)
如果要打印而不是选择,请将其放入循环中


你可以这样试试

;WITH nums AS
       (SELECT 1 AS value
        UNION ALL
        SELECT value + 1 AS value
        FROM nums
        WHERE nums.value <=5)
    SELECT replicate('*',value)
    FROM nums 

这里有另一个不使用循环的选项。在现实世界中,理货/数字表可以很快解决这一问题

select replicate('*', n)
from
(
    values(1),(2),(3),(4),(5)
) x(n)

尝试SQL SERVER中的内置复制方法

DECLARE @var int                
SET @var = 1   

DECLARE @rows int  /*number of rows you want*/
SET @rows = 5 

WHILE (@var <= @rows)   
BEGIN                       
  PRINT Replicate('*', @var)     
  SET @var = @var + 1            
END 

更多详细信息:

print replicate'*',@xI根本不会在这里使用循环。我们一开始不会使用tsql进行打印。错误的工具,错误的学习经验。所有SQL版本都支持它吗?@PrashantPimpale。它已经存在很长很长时间了。它是如何工作的?在哪里读什么是xn@AuthorProxy来自的正在使用表值构造函数。x是派生表的别名。n是在表中命名列,类似于在cte中命名列的方式^_^
DECLARE @var int                
SET @var = 1   

DECLARE @rows int  /*number of rows you want*/
SET @rows = 5 

WHILE (@var <= @rows)   
BEGIN                       
  PRINT Replicate('*', @var)     
  SET @var = @var + 1            
END