Imprimir variable entera y cadena en la misma línea en SQL

81

Ok, he buscado una respuesta a esto en Technet, sin éxito.

Solo quiero imprimir una variable entera concatenada con dos variables String.

Este es mi código, que no se ejecuta:

print 'There are ' + @Number + ' alias combinations did not match a record'

Parece una característica tan básica que no puedo imaginar que no sea posible en T-SQL. Pero si no es posible, dígalo. Parece que no puedo encontrar una respuesta directa.

Joel Coehoorn
fuente
2
print 'There are ' + CAST(@Number AS NVARCHAR(100)) + ' alias combinations did not match a record'
potasio

Respuestas:

133
declare @x INT = 1 /* Declares an integer variable named "x" with the value of 1 */
    
PRINT 'There are ' + CAST(@x AS VARCHAR) + ' alias combinations did not match a record' /* Prints a string concatenated with x casted as a varchar */
mohan111
fuente
Me gusta el Método Cast. Corto y dulce, y mantiene la variable original como int, que necesito.
Ja, lo habría aceptado de inmediato pero no me dejaría hasta dentro de 6 minutos.
8

Los números tienen mayor precedencia que las cadenas, por lo que, por supuesto, los +operadores quieren convertir sus cadenas en números antes de sumar.

Podrías hacerlo:

print 'There are ' + CONVERT(varchar(10),@Number) +
      ' alias combinations did not match a record'

o utilice las funciones de formato (bastante limitadas) de RAISERROR:

RAISERROR('There are %i alias combinations did not match a record',10,1,@Number)
WITH NOWAIT
Damien_The_Unbeliever
fuente
Gracias por la información de antecedentes. No me di cuenta de que T-SQL pensaba tanto en la precedencia al hacer declaraciones de impresión simples.
1
@AdamJ -no tiene nada que ver con printdeclaraciones, per-se. T-SQL es un lenguaje muy simple y bastante anticuado. En T-SQL, todas las entradas a un operador deben ser del mismo tipo.
Damien_The_Unbeliever
¡Gracias! Supongo que a veces olvido que SQL se creó en los años 70. SQL Server tiene un aspecto bastante elegante (en mi opinión) que creo que lo hace parecer más moderno de lo que realmente es.
3

No puede combinar una cadena de caracteres y una cadena numérica. Necesita convertir el número en una cadena usando CONVERT o CAST.

Por ejemplo:

print 'There are ' + cast(@Number as varchar) + ' alias combinations did not match a record'

o

print 'There are ' + convert(varchar,@Number) + ' alias combinations did not match a record'
Azul grande
fuente
2

Verifique si ha establecido un valor inicial para los valores int y decimales que se imprimirán.

Esta muestra está imprimiendo una línea vacía

declare @Number INT
print 'The number is : ' + CONVERT(VARCHAR, @Number)

Y esta muestra está imprimiendo -> El número es: 1

declare @Number INT = 1
print 'The number is : ' + CONVERT(VARCHAR, @Number)
Selim Özbudak
fuente
1

Puedes probar este

declare @Number INT = 5                            
print 'There are ' + CONVERT(VARCHAR, @Number) + ' alias combinations did not match a record'
BAdmin
fuente