print @T & @F
Kehrt zurück 0
&
ist der bitweise AND- Operator.
Der & bitweise Operator führt ein bitweises logisches UND zwischen den beiden Ausdrücken aus, wobei jedes entsprechende Bit für beide Ausdrücke verwendet wird. Die Bits im Ergebnis werden genau dann auf 1 gesetzt, wenn beide Bits (für das aktuelle aufzulösende Bit) in den Eingabeausdrücken den Wert 1 haben. Andernfalls wird das Bit im Ergebnis auf 0 gesetzt.
@T & @F
Löst in Ihrem Fall auf 1 & 0
und gibt so ein Ergebnis des Datentyps BIT
mit Wert zurück0
Bei der Übergabe an den PRINT
Operator wird dieses bit
Ergebnis implizit in einen String umgewandelt und das Ergebnis an den Client ausgegeben.
print @T and @F
Hat ziemlich viel falsch gemacht.
AND
Kombiniert zwei Boolesche Ausdrücke und gibt TRUE zurück, wenn beide Ausdrücke TRUE sind
bit
ist nicht dasselbe wie boolesch. Sie sind nicht austauschbar und SQL Server wird bit
bei Bedarf nicht implizit in einen booleschen Datentyp umgewandelt (SQL Server implementiert den booleschen SQL-Datentyp nicht).
Sie müssten also einen Ausdruck wie "" verwenden
@T = 'TRUE' AND @F = 'TRUE'
Anstatt von
@T and @F
Auch dann sind Ihre Probleme noch nicht PRINT
gelöst. Akzeptiert ohnehin keinen booleschen Ausdruck. Sie können den folgenden Ausdruck verwenden CASE
.
PRINT CASE
WHEN (@T = 'TRUE' AND @F = 'TRUE') THEN 'True'
WHEN NOT (@T = 'TRUE' AND @F = 'TRUE') THEN 'False'
ELSE 'Unknown' -- SQL uses three valued logic
END