2010-01-24 5 views
6

Ich möchte eine einfache Anweisung drucken print (1 = 1), erwarte ich das Ergebnis zu TRUE oder 1, aber SQL Server sagen Sie mir: Falsche Syntax in der Nähe ' = '. warum ist das?Wie kann ich das Ergebnis eines Vergleichs in eine Variable speichern

Das Gleiche gilt für eine Aussage passieren wird, wie die

declare @test bit 
set @test = (1=1) 

zusammenfassend, wie kann ich „sehen“, was aus einem Vergleich zurückgegeben wird eine IF-Anweisung ohne

Update: Der Grund, warum ich gefragt bin ist, weil ich die folgende Anweisung

declare @AgingAmount smallint 
set @AgingAmount = 500 
select Amount, datediff(day,Batch.SubmitDate,getdate()) as Aging from myreporrt 
where datediff(day,Batch.SubmitDate,getdate()) > @AgingAmount 

alle Zeilen zurück, auch mit dem Altern von 300 zu debuggen bin versucht, warum so wollte ich, wenn testen DATEDI ff (day, datesubmited, getdate())> 500 gibt wahr oder falsch zurück, konnte jedoch keinen Weg finden, wie das Ergebnis dieses Vergleichs angezeigt werden kann.

+1

Können Sie ein Beispiel für die genaue Abfrage angeben, die Sie ausführen möchten? – toddk

+0

Ich sollte eigentlich den Titel für diese Frage in "Wie kann ich das Ergebnis eines Vergleichs anzeigen, ohne eine if-Anweisung" –

Antwort

6

Obwohl SQL Server das Konzept eines boolean Typ hat, und es versteht Ausdrücke, die in IF und WHERE Klauseln zu einer boolean beheben, es bietet keine Unterstützung für boolean Variablen oder Parameter zu deklarieren. Der bit-Datentyp kann das Ergebnis eines boolean-Ausdrucks nicht direkt speichern, obwohl es verdächtig aussieht.

Die Nähe zu einem boolean Datentyp bekommen kann, ist dies:

-- Store the result of a boolean test. 
declare @result bit 
select @result = case when <boolean expression> then 1 else 0 end 

-- Make use of the above result somewhere else. 
if @result = 1 
    ... 
else 
    ... 

zur Verwirrung hinzuzufügen, behandelt SQL Server Management Studio bit wie boolean bei der Anzeige von Ergebnissen und ADO.NET Karten bit-System.Boolean wenn Daten hin- und hergeschickt werden.

Aktualisierung: Um Ihre letzte Frage zu beantworten, verwenden Sie die case when ... then 1 else 0 end Syntax in der select Anweisung.

+1

für eine. Http://msdn.microsoft.com/en-us/library/ms188074.aspx ändern "offizielle" Bestätigung, dass der Boolesche Datentyp nicht deklariert oder zuweisbar ist. – mjv

+0

Sheesh, aber danke !! Zurück in die Steinzeit mit SQL Server – Bart

Verwandte Themen