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.


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 */

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

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'

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)

1

Sie können dieses versuchen,

declare @Number INT = 5                            
print 'There are ' + CONVERT(VARCHAR, @Number) + ' alias combinations did not match a record'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.