2013-07-26 18 views
7

ho due variabili:SQL concatenazione Server varchar e int

One è varchar e uno è int, io non sono sicuro di come scrivere un ciclo durante l'utilizzo di fusione in modo che mostrerà il seguente: ad esempio, se il while è 5 allora il risultato dovrebbe essere Meter 1 Meter 2 Meter 3 Meter 4 Meter 5.

ho questo codice, ma non è in esecuzione (impossibile convertire varchar int) anche quando faccio il casting non funziona.

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

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

è necessario lanciare o convertire @MeterNumber ad un varchar, quando si stampa fuori –

risposta

14

Questo dovrebbe fare il trucco: lanciare MeterNumber su un varchar quando lo stampi.

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

WHILE (@MeterNumber <= 5) 
BEGIN 
PRINT @Name + ' ' + cast(@MeterNumber as varchar(20)) 
SET @MeterNumber = @MeterNumber + 1 
END 

EDIT:

Ad esempio voglio dichiarare una terza variabile che avrebbe memorizzare ogni iterazione. Metro 1, Metro 2 ... ma non sono sicuro di dove collocarlo!

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 
+0

come se voglio salvare il risultato in una variabile ogni volta? –

+0

quale risultato intendi? La stampa? –

+0

Ad esempio, desidero dichiarare una terza variabile che memorizzerebbe ogni iterazione. Metro 1, Metro 2 ... ma non sono sicuro di dove collocarlo! –

3

Provate questo (senza 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 
Problemi correlati