Печать целочисленной переменной и строки в одной строке в SQL

81

Хорошо, я искал ответ на этот вопрос на Technet, но безрезультатно.

Я просто хочу напечатать целочисленную переменную, объединенную с двумя переменными String.

Это мой код, который не запускается:

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

Это такая базовая функция, что я не мог представить, что это невозможно в T-SQL. Но если это невозможно, просто скажите об этом. Кажется, я не могу найти прямого ответа.

Джоэл Кохорн
источник
2
print 'There are ' + CAST(@Number AS NVARCHAR(100)) + ' alias combinations did not match a record'
Поташин

Ответы:

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
источник
Мне нравится Cast Method. Коротко и красиво, и сохраняет исходную переменную как int, которая мне нужна.
Ха, я бы сразу принял это, но он не позволял мне еще 6 минут.
8

Числа имеют более высокий приоритет, чем строки, поэтому, конечно, +операторы хотят преобразовать ваши строки в числа перед добавлением.

Вы могли сделать:

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

или используйте (довольно ограниченные) возможности форматирования RAISERROR:

RAISERROR('There are %i alias combinations did not match a record',10,1,@Number)
WITH NOWAIT
Damien_The_Unbeliever
источник
Спасибо за справочную информацию. Я не понимал, что T-SQL так много думает о приоритете при выполнении простых операторов печати.
1
@AdamJ - по сути, это не имеет никакого отношения к printутверждениям. T-SQL - очень простой, довольно старомодный язык. В T-SQL все входные данные оператора должны быть одного типа.
Damien_The_Unbeliever
Благодаря! Наверное, иногда я забываю, что SQL был создан в 70-х годах. SQL Server выглядит довольно гладко (на мой взгляд), что, на мой взгляд, делает его более современным, чем есть на самом деле.
3

Вы не можете комбинировать символьную строку и числовую строку. Вам нужно преобразовать число в строку, используя CONVERT или CAST.

Например:

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

или же

print 'There are ' + convert(varchar,@Number) + ' alias combinations did not match a record'
Большой синий
источник
2

Дважды проверьте, если вы установили и начальное значение для целых и десятичных значений для печати.

В этом примере печатается пустая строка

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

И этот образец печатается -> Номер: 1

declare @Number INT = 1
print 'The number is : ' + CONVERT(VARCHAR, @Number)
Селим Озбудак
источник
1

Вы можете попробовать это,

declare @Number INT = 5                            
print 'There are ' + CONVERT(VARCHAR, @Number) + ' alias combinations did not match a record'
BAdmin
источник