8

我有两个变量:

一个是 varchar,一个是 int,我不知道如何使用强制转换编写一个 while 循环,以便它显示以下内容:例如,如果 while 循环是 5,那么结果应该是 Meter 1 Meter 2 Meter 3 Meter 4 Meter 5.

我有这段代码,但它没有运行(无法将 varchar 转换为 int),即使我进行强制转换它也不起作用。

DECLARE @Name varchar (20) = 'Meter',
        @MeterNumber int = 1

WHILE (@MeterNumber < 5)
BEGIN
PRINT @Name + ' ' + @MeterNumber
SET  @MeterNumber = @MeterNumber + 1
END
4

2 回答 2

15

这应该可以解决问题:在打印 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
于 2013-07-26T22:47:12.627 回答
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
于 2013-07-29T05:21:59.400 回答