我有两个变量:
一个是varchar,一个是int,我不知道如何使用强制转换来编写一个while循环,以便它显示以下内容:例如,如果while循环是5,那么结果应该是 仪表1 仪表2 仪表3 仪表4 仪表5。
我有这个代码,但是它没有运行(无法将varchar转换为int),即使我进行转换它也不起作用。
DECLARE @Name varchar (20) = 'Meter',
@MeterNumber int = 1
WHILE (@MeterNumber < 5)
BEGIN
PRINT @Name + ' ' + @MeterNumber
SET @MeterNumber = @MeterNumber + 1
END
答案 0 :(得分:14)
这应该可以解决这个问题:在打印时将MeterNumber转换为varchar。
DECLARE @Name varchar (20) = 'Meter',
@MeterNumber int = 1
WHILE (@MeterNumber <= 5)
BEGIN
PRINT @Name + ' ' + cast(@MeterNumber as varchar(20))
SET @MeterNumber = @MeterNumber + 1
END
编辑:
例如,我想声明一个存储每个变量的第三个变量 迭代。仪表1,仪表2 ......但我不知道放在哪里!
DECLARE @Name varchar (20) = 'Meter',
@MeterNumber int = 1 ,
@OutPut varchar(max) =''; -- this can get biiiig.
WHILE (@MeterNumber <= 5)
BEGIN
SET @Output = @Output + @Name + ' ' + cast(@MeterNumber as varchar(20)) + ','
PRINT LEFT(@Output, len(@Output) - 1)
SET @MeterNumber = @MeterNumber + 1
END
答案 1 :(得分:3)
试试这个(没有LOOP
) -
DECLARE
@Name VARCHAR(20) = 'Meter'
, @MeterNumber INT = 5
, @OutPut VARCHAR(MAX) = ''
SELECT @OutPut = STUFF((
SELECT CHAR(13) + @Name + ' ' + CAST(sv.number AS VARCHAR(5))
FROM [master].dbo.spt_values sv
WHERE sv.[type] = 'p'
AND sv.number BETWEEN 1 AND @MeterNumber
FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)'), 1, 1, '')
PRINT @OutPut