Drukowanie zmiennej całkowitej i łańcucha w tym samym wierszu w języku SQL

81

Ok, więc bezskutecznie szukałem odpowiedzi na to w Technet.

Chcę po prostu wydrukować zmienną całkowitą połączoną z dwiema zmiennymi typu String.

To jest mój kod, który nie działa:

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

Wydaje się, że to taka podstawowa funkcja, nie wyobrażałem sobie, że nie jest to możliwe w T-SQL. Ale jeśli nie jest to możliwe, powiedz to. Nie mogę znaleźć prostej odpowiedzi.

Joel Coehoorn
źródło
2
print 'There are ' + CAST(@Number AS NVARCHAR(100)) + ' alias combinations did not match a record'
potaszyn

Odpowiedzi:

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
źródło
Podoba mi się metoda Cast. Krótkie i słodkie i zachowuje oryginalną zmienną jako int, której potrzebuję.
Ha, zaakceptowałbym to od razu, ale nie pozwoliłoby mi to na kolejne 6 minut.
8

Liczby mają wyższy priorytet niż łańcuchy, więc oczywiście +operatorzy chcą przekształcić ciągi znaków w liczby przed dodaniem.

Mógłbyś:

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

lub skorzystaj z (raczej ograniczonych) możliwości formatowania RAISERROR:

RAISERROR('There are %i alias combinations did not match a record',10,1,@Number)
WITH NOWAIT
Damien_The_Unbeliever
źródło
Dziękuję za dodatkowe informacje. Nie zdawałem sobie sprawy, że T-SQL tak wiele myśli o pierwszeństwie podczas wykonywania prostych instrukcji print.
1
@AdamJ - nie ma to nic wspólnego z printinstrukcjami, per se. T-SQL to bardzo prosty, dość staromodny język. W T-SQL wszystkie dane wejściowe dla operatora muszą być tego samego typu.
Damien_The_Unbeliever
Dzięki! Chyba czasami zapominam, że SQL powstał w latach 70-tych. SQL Server ma dość elegancki wygląd (moim zdaniem), co moim zdaniem sprawia, że ​​wydaje się bardziej nowoczesny, niż jest w rzeczywistości.
3

Nie można łączyć ciągu znaków i liczb. Musisz przekonwertować liczbę na ciąg za pomocą CONVERT lub CAST.

Na przykład:

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

lub

print 'There are ' + convert(varchar,@Number) + ' alias combinations did not match a record'
Duży błekit
źródło
2

Sprawdź dwukrotnie, czy ustawiłeś i wartość początkową dla wartości int i dziesiętnych do wydrukowania.

Ten przykład drukuje pusty wiersz

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

A ta próbka to drukowanie -> Liczba to: 1

declare @Number INT = 1
print 'The number is : ' + CONVERT(VARCHAR, @Number)
Selim Özbudak
źródło
1

Możesz spróbować tego,

declare @Number INT = 5                            
print 'There are ' + CONVERT(VARCHAR, @Number) + ' alias combinations did not match a record'
BAdmin
źródło