Drucken einer Ganzzahlvariablen und einer Zeichenfolge in derselben Zeile in SQL

80

Ok, ich habe auf Technet nach einer Antwort darauf gesucht, ohne Erfolg.

Ich möchte nur eine ganzzahlige Variable drucken, die mit zwei String-Variablen verkettet ist.

Dies ist mein Code, der nicht ausgeführt wird:

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

Es scheint eine so grundlegende Funktion zu sein, dass ich mir nicht vorstellen kann, dass dies in T-SQL nicht möglich ist. Aber wenn es nicht möglich ist, sagen Sie es einfach. Ich kann keine klare Antwort finden.

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

Antworten:

131
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
quelle
Ich mag die Cast-Methode. Kurz und bündig und behält die ursprüngliche Variable als int bei, was ich brauche.
Ha, ich hätte es sofort akzeptiert, aber es würde mich keine weiteren 6 Minuten lassen.
8

Zahlen haben eine höhere Priorität als Zeichenfolgen, daher +möchten die Operatoren Ihre Zeichenfolgen natürlich vor dem Hinzufügen in Zahlen konvertieren.

Du könntest es tun:

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

oder verwenden Sie die (eher eingeschränkten) Formatierungsmöglichkeiten von RAISERROR:

RAISERROR('There are %i alias combinations did not match a record',10,1,@Number)
WITH NOWAIT
Damien_The_Unbeliever
quelle
Vielen Dank für die Hintergrundinformationen. Mir war nicht klar, dass T-SQL bei einfachen Druckanweisungen so viel Vorrang hat.
1
@AdamJ -es hat an sich nichts mit printAussagen zu tun . T-SQL ist eine sehr einfache, ziemlich altmodische Sprache. In T-SQL müssen alle Eingaben in einen Operator vom gleichen Typ sein.
Damien_The_Unbeliever
Vielen Dank! Ich denke, ich vergesse manchmal, dass SQL in den 70ern erstellt wurde. SQL Server sieht (meiner Meinung nach) ziemlich elegant aus, was es meiner Meinung nach moderner erscheinen lässt, als es wirklich ist.
3

Sie können eine Zeichenfolge und eine numerische Zeichenfolge nicht kombinieren. Sie müssen die Zahl entweder mit CONVERT oder CAST in eine Zeichenfolge konvertieren.

Zum Beispiel:

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

oder

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

Überprüfen Sie noch einmal, ob Sie einen Anfangs- und Anfangswert für die zu druckenden Int- und Dezimalwerte festgelegt haben.

In diesem Beispiel wird eine leere Zeile gedruckt

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

Und dieses Beispiel wird gedruckt -> Die Nummer lautet: 1

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

Sie können dieses versuchen,

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