Error con EXISTS y TOP 1

20/09/2006 - 23:08 por Tito | Informe spam
estoy tratando de hacer el siguiente IF en un trigger y me da error "near
="

declare @tip char(2), @doc char(5), @fec smalldatetime
if exists(
SELECT TOP 1 @TIP=D.TIPO, @DOC=D.DOCUMENTO, @FEC=D.FECHA
FROM DELETED D WHERE D.total<0 order by tipo, documento)

Raiserror(.., @tip, @doc)
...


Lo que quiero es detectar si hay algun registro en el conjunto DELETED que
tenga el campo total<0 y a la vez quiero guardar en una variable el # del
primer documento que cumple con esa condicion para mostrarlo en un mensaje.

Tengo otra alternativa para hacer esto ?


Tito

Preguntas similare

Leer las respuestas

#1 Isaias
21/09/2006 - 02:11 | Informe spam
Tito

NO puedes preguntar IF EXISTS() y hacer una asignacion de datos @var = col1,
@var2 = col2, etc.

Deberias preguntar primero y despues asignar


IF EXISTS()
BEGIN
SELECT TOP 1 @MYVAR = COL1, ..
Saludos
IIslas


"Tito" wrote:

estoy tratando de hacer el siguiente IF en un trigger y me da error "near
="

declare @tip char(2), @doc char(5), @fec smalldatetime
if exists(
SELECT TOP 1 @TIP=D.TIPO, @DOC=D.DOCUMENTO, @FEC=D.FECHA
FROM DELETED D WHERE D.total<0 order by tipo, documento)

Raiserror(.., @tip, @doc)

.

Lo que quiero es detectar si hay algun registro en el conjunto DELETED que
tenga el campo total<0 y a la vez quiero guardar en una variable el # del
primer documento que cumple con esa condicion para mostrarlo en un mensaje.

Tengo otra alternativa para hacer esto ?


Tito



Respuesta Responder a este mensaje
#2 Alejandro Mesa
21/09/2006 - 02:48 | Informe spam
Tito,

Usa la variable para chequear la existencia.

set @DOC = NULL

SELECT TOP 1
@TIP=D.TIPO, @DOC=D.DOCUMENTO, @FEC=D.FECHA
FROM
DELETED D
WHERE
D.total<0
order by
tipo, documento

if @DOC is not null
raiserror(...)


AMB


"Tito" wrote:

estoy tratando de hacer el siguiente IF en un trigger y me da error "near
="

declare @tip char(2), @doc char(5), @fec smalldatetime
if exists(
SELECT TOP 1 @TIP=D.TIPO, @DOC=D.DOCUMENTO, @FEC=D.FECHA
FROM DELETED D WHERE D.total<0 order by tipo, documento)

Raiserror(.., @tip, @doc)

.

Lo que quiero es detectar si hay algun registro en el conjunto DELETED que
tenga el campo total<0 y a la vez quiero guardar en una variable el # del
primer documento que cumple con esa condicion para mostrarlo en un mensaje.

Tengo otra alternativa para hacer esto ?


Tito



Respuesta Responder a este mensaje
#3 Ricardo Passians
21/09/2006 - 11:11 | Informe spam
Otra opción que te puede servir es eliminando el EXISTS y usando
@@ROWCOUNT:

Ej.

SELECT TOP 1 @TIP=D.TIPO, @DOC=D.DOCUMENTO, @FEC=D.FECHA
FROM DELETED D WHERE D.total<0 order by tipo, documento

if @@ROWCOUNT>0
Raiserror(.., )
...

Ricardo Passians


"Tito" escribió en el mensaje
news:
estoy tratando de hacer el siguiente IF en un trigger y me da error "near
="

declare @tip char(2), @doc char(5), @fec smalldatetime
if exists(
SELECT TOP 1 @TIP=D.TIPO, @DOC=D.DOCUMENTO, @FEC=D.FECHA
FROM DELETED D WHERE D.total<0 order by tipo, documento)

Raiserror(.., @tip, @doc)
...


Lo que quiero es detectar si hay algun registro en el conjunto DELETED que
tenga el campo total<0 y a la vez quiero guardar en una variable el # del
primer documento que cumple con esa condicion para mostrarlo en un
mensaje.

Tengo otra alternativa para hacer esto ?


Tito

Respuesta Responder a este mensaje
#4 cschmid
21/09/2006 - 14:46 | Informe spam
Con lo cual yo sacaria el TOP 1 para evitar el sort, por que lo que
necesitas saber es si hay alguna almenos, y el rowcount te dará el
total, que para tu caso es lo mismo.

Ricardo Passians ha escrito:

Otra opción que te puede servir es eliminando el EXISTS y usando
@@ROWCOUNT:

Ej.

SELECT TOP 1 @TIP=D.TIPO, @DOC=D.DOCUMENTO, @FEC=D.FECHA
FROM DELETED D WHERE D.total<0 order by tipo, documento

if @@ROWCOUNT>0
Raiserror(.., )
...

Ricardo Passians


"Tito" escribió en el mensaje
news:
> estoy tratando de hacer el siguiente IF en un trigger y me da error "near
> ="
>
> declare @tip char(2), @doc char(5), @fec smalldatetime
> if exists(
> SELECT TOP 1 @TIP=D.TIPO, @DOC=D.DOCUMENTO, @FEC=D.FECHA
> FROM DELETED D WHERE D.total<0 order by tipo, documento)
>
> Raiserror(.., @tip, @doc)
> ...
>
>
> Lo que quiero es detectar si hay algun registro en el conjunto DELETED que
> tenga el campo total<0 y a la vez quiero guardar en una variable el # del
> primer documento que cumple con esa condicion para mostrarlo en un
> mensaje.
>
> Tengo otra alternativa para hacer esto ?
>
>
> Tito
>
Respuesta Responder a este mensaje
#5 Pedro Echavarria
21/09/2006 - 15:28 | Informe spam
Yo pienso que si se saca el TOP 1 puede que sea mas lento ya que devolveria
todos los registros del conjunto aunque no tenga el sort.
De todos modos si el companero indico que era para un trigger, normalmente
los triggers no tienen muchos registros en la tabla DELETED por tanto puede
que sea insignificante la diferencia.

Saludos.

wrote in message
news:
Con lo cual yo sacaria el TOP 1 para evitar el sort, por que lo que
necesitas saber es si hay alguna almenos, y el rowcount te dará el
total, que para tu caso es lo mismo.

Ricardo Passians ha escrito:

Otra opción que te puede servir es eliminando el EXISTS y usando
@@ROWCOUNT:

Ej.

SELECT TOP 1 @TIP=D.TIPO, @DOC=D.DOCUMENTO, @FEC=D.FECHA
FROM DELETED D WHERE D.total<0 order by tipo, documento

if @@ROWCOUNT>0
Raiserror(.., )
...

Ricardo Passians


"Tito" escribió en el mensaje
news:
> estoy tratando de hacer el siguiente IF en un trigger y me da error
> "near
> ="
>
> declare @tip char(2), @doc char(5), @fec smalldatetime
> if exists(
> SELECT TOP 1 @TIP=D.TIPO, @DOC=D.DOCUMENTO, @FEC=D.FECHA
> FROM DELETED D WHERE D.total<0 order by tipo, documento)
>
> Raiserror(.., @tip, @doc)
> ...
>
>
> Lo que quiero es detectar si hay algun registro en el conjunto DELETED
> que
> tenga el campo total<0 y a la vez quiero guardar en una variable el #
> del
> primer documento que cumple con esa condicion para mostrarlo en un
> mensaje.
>
> Tengo otra alternativa para hacer esto ?
>
>
> Tito
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida