2010-01-24 18 views
6

Quiero imprimir una declaración simple print (1 = 1), espero que el resultado sea TRUE o 1 pero el servidor sql dime: Sintaxis incorrecta cerca de ' = '. ¿por qué es eso?¿Cómo puedo almacenar el resultado de una comparación en una variable

mismo ocurrirá para una declaración como esa

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

En resumen, ¿cómo puedo "ver" lo que se devuelve desde una comparación sin utilizar una instrucción IF

Actualización: La razón por la que estoy pidiendo es porque estoy tratando de depurar la razón por la instrucción que sigue

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

devolverá todas las filas, incluso con el envejecimiento de 300 así que quería probar si datedi ff (day, dateubmited, getdate())> 500 devuelve verdadero o falso, pero no pudo encontrar la manera de mostrar el resultado de esta comparación.

+1

¿Podría proporcionarnos una muestra de la consulta exacta que está intentando ejecutar? – toddk

+0

Debo cambiar el título de esta pregunta a "¿Cómo puedo mostrar el resultado de una comparación sin usar una instrucción if?" –

Respuesta

6

Aunque SQL Server tiene el concepto de un tipo boolean, y se entiende expresiones que se resuelven en un boolean en IF y WHERE cláusulas, que no es compatible declarar boolean variables o parámetros. El tipo de datos bit no puede almacenar el resultado de una expresión boolean directamente, aunque se parezca sospechosamente a uno.

El más cercano se puede llegar a un tipo de datos boolean es la siguiente:

-- 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 
    ... 

Para aumentar la confusión, SQL Server Management Studio trata bit como boolean resultados cuando se exhiben, y los mapas de ADO.NET bit a System.Boolean al pasar datos de ida y vuelta.

Actualización: para responder a su última pregunta, utilice la sintaxis case when ... then 1 else 0 endselect en la declaración.

+1

Consulte http://msdn.microsoft.com/en-us/library/ms188074.aspx para obtener una confirmación "oficial" sobre el tipo de datos booleanos no declarable ni asignable. – mjv

+0

Sheesh, ¡pero gracias! De vuelta a la edad de piedra con SQL Server – Bart

Cuestiones relacionadas