2014-05-09 10 views
37

Ok, więc szukałem odpowiedzi na to na Technet, na próżno.Drukowanie zmiennej liczb całkowitych i ciągów na tej samej linii w SQL

Po prostu chcę wydrukować zmienną całkowitą połączoną 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 taki podstawowej funkcji, nie mogę sobie wyobrazić, że nie jest to możliwe w T-SQL. Ale jeśli nie jest to możliwe, po prostu powiedz to. Nie mogę znaleźć prostej odpowiedzi.

+1

'print 'Istnieje' + CAST (@liczba AS nvarchar (100)) + kombinacje aliasu nie pasują do rekordu ". – potashin

Odpowiedz

57
declare @x INT = 1 

PRINT 'There are ' + CAST(@x AS VARCHAR) + ' alias combinations did not match a record' 
+0

Podoba mi się metoda Cast. Krótkie i słodkie, i zachowuje oryginalną zmienną jako int, której potrzebuję. – FluffyKittens

+0

Ha, natychmiast bym to zaakceptował, ale nie pozwoliłbym na kolejne 6 minut. – FluffyKittens

4

Numery mają higher precedence niż łańcuchy, więc operatory + chcą przekonwertować ciągi na liczby przed dodaniem.

Można zrobić:

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

lub użyj (raczej ograniczona) obiektów formatowania RAISERROR:

RAISERROR('There are %i alias combinations did not match a record',10,1,@Number) 
WITH NOWAIT 
+0

Dziękujemy za informacje dodatkowe. Nie zdawałem sobie sprawy, że T-SQL tak wiele myśli, że pierwszeństwo przy wykonywaniu prostych instrukcji drukowania. – FluffyKittens

+0

@AdamJ -to nie ma nic wspólnego z instrukcjami 'print', per-se. T-SQL to bardzo prosty, dość staroświecki język. W T-SQL wszystkie dane wejściowe do operatora muszą być tego samego typu. –

+0

Dzięki! Myślę, że czasami zapominam, że SQL powstał w latach 70-tych. SQL Server ma dość elegancki wygląd (moim zdaniem), który moim zdaniem sprawia, że ​​wydaje się on bardziej nowoczesny niż w rzeczywistości. – FluffyKittens

0

Możesz spróbować tego,

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

Nie można łączyć ciągu znaków i liczby ic ciąg. Musisz przekonwertować liczbę na łańcuch, używając 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' 
0

dwukrotnie sprawdzić, czy masz ustawione i wartość początkowa dla int i wartości dziesiętnych do wydrukowania.

Próbka ta drukuje pusty wiersz

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

I ta próba jest druk -> Numer jest: 1

declare @Number INT = 1 
print 'The number is : ' + CONVERT(VARCHAR, @Number) 
Powiązane problemy