[adp] construir consulta "select top X ..."

15/07/2003 - 11:31 por iDeafix | Informe spam
Hola

Tengo un form con dos campos: miprovincia y micantidad.

El objetivo es ir a la tabla de clientes y seleccionar tantos como diga
"micantidad" y que sean de "miprovincia".

A estos clientes se les debe poner a "Verdadero" su campo "procesado". Así
sabemos que han sido seleccionados en ejecuciones anteriores.

No sé por donde empezar. Como requiere parámetros tendría que ser un SP,
pero debe ser actualizable también... ¿Se puede construir desde vba un SP en
ese momento y ejecutarlo?

saludos

Preguntas similare

Leer las respuestas

#6 Miguel Egea
15/07/2003 - 15:13 | Informe spam
espera un momentito que hay formas sin hacerlo dinámico :-) es a través de
set rowcount, por eso quería ponerlo como un artículillo.
Esta tarde lo publico sin falta


Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"Carlos Sacristan" <csacristanARROBAocasoPUNTOes> escribió en el mensaje
news:#

Yo me refería a ejecutarla dinámicamente dentro del procedimiento
almacenado. De hecho, si al final lo haces de la forma que estamos
comentando, tendrás que ejecutar dinámicamente dos sentencias, una para
devolver los resultados:

EXEC('SELECT TOP ' + @cantidad + ' campo1, campo2, ... FROM ')

y la otra para actualizar los registros, tal que así:

EXEC('UPDATE tuTabla SET campo=valor FROM tuTabla a INNER JOIN (SELECT
TOP ' + @cantidad + ' campo1, campo2, ... FROM ...) b ON a.elID = b.elID')


De todos modos, esta opción no me gusta mucho, lo que ocurre es que


hoy
estoy bastante liado y no puedo pensar en algo mejor :( A ver si


mañana
tengo un ratillo y le echo una pensada


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm

"iDeafix" escribió en el mensaje
news:bf0pt8$9napd$
> Si, si, Carlos, si esa es la cuestión ¿como se construye y ejecuta
> dinámicamente?
> hasta ahora en mdb lo había resuelto más o menos así con createquerydef,
> pero ya no funciona
>
> Dim qry As Object
>
> cc1 = "SELECT TOP "
> cc2 = CStr(Forms!Asignacion30!Cantidad)
> cc3 = " [Clientes].* FROM ...
>
> cc = cc1 & cc2 & cc3 & ...
>
> Set qry = CurrentDb.CreateQueryDef("Carga General Vista Previa", cc)
>
>
> Esta consulta, después era usada como fuente para crear una tabla


temporal
> (y de paso podía usarla como vista previa del proceso, que no te engañe


el
> nombre "Carga General Vista Previa").
>
> Pero ahora con ADP, la creación de la consulta se supone que habrá que
> hacerla de otra forma, por ADO me imagino...
> Además ya no puedo usar tablas temporales locales al usuario (y no me
> gustaría crearlas en el servidor).
>
>
>
> "Carlos Sacristan" <csacristanARROBAocasoPUNTOes> escribió en el mensaje
> news:#
> >
> > El parámetro para TOP no puede ser una variable, o sea que si
> necesitas
> > que eso sea así tendrás que construir y ejecutar dinámicamente la
> sentencia
> >
> >
> >
> > Un saludo
> >
> > -
> > "Sólo sé que no sé nada. " (Sócrates)
> >
> > Por favor, responder únicamente al foro
> >
> > (Guía de netiquette del foro)
> > http://www.helpdna.net/bosqlfaq00.htm
> > http://perso.wanadoo.es/rubenvigon/foro
> >
> > (FAQ's de SQL Server)
> > http://support.microsoft.com/defaul.../70faq.asp
> > http://www.helpdna.net/bosqlfaq.htm
> >
> > "iDeafix" escribió en el mensaje
> > news:bf0on6$9rplh$
> > > No, no me he explicado bien. Trataba de ser didáctico dividiendo el
> > problema
> > > en dos partes y he conseguido lo contrario.
> > >
> > > Sólo necesito hacer una acción: Actualizar el campo "procesado" a X


de
> los
> > > clientes que cumplan el criterio "provincia".
> > >
> > > ¿Y como construyo un SP cuyo SELECT TOP X es variable en función de


lo
> que
> > > el usuario escriba en el form? He aqui la cuestión
> > >
> > >
> > >
> > > "Carlos Sacristan" <csacristanARROBAocasoPUNTOes> escribió en el
mensaje
> > > news:
> > > >
> > > > En tu procedimiento podrías hacer las dos cosas: actualizar y
> luego
> > > > devolver los resultados...
> > > >
> > > >
> > > >
> > > > Un saludo
> > > >
> > > > -
> > > > "Sólo sé que no sé nada. " (Sócrates)
> > > >
> > > > Por favor, responder únicamente al foro
> > > >
> > > > (Guía de netiquette del foro)
> > > > http://www.helpdna.net/bosqlfaq00.htm
> > > > http://perso.wanadoo.es/rubenvigon/foro
> > > >
> > > > (FAQ's de SQL Server)
> > > >
http://support.microsoft.com/defaul.../70faq.asp
> > > > http://www.helpdna.net/bosqlfaq.htm
> > > >
> > > > "iDeafix" escribió en el mensaje
> > > > news:bf0hfj$9rbs5$
> > > > > Hola
> > > > >
> > > > > Tengo un form con dos campos: miprovincia y micantidad.
> > > > >
> > > > > El objetivo es ir a la tabla de clientes y seleccionar tantos


como
> > diga
> > > > > "micantidad" y que sean de "miprovincia".
> > > > >
> > > > > A estos clientes se les debe poner a "Verdadero" su campo
> > "procesado".
> > > > Así
> > > > > sabemos que han sido seleccionados en ejecuciones anteriores.
> > > > >
> > > > > No sé por donde empezar. Como requiere parámetros tendría que


ser
un
> > SP,
> > > > > pero debe ser actualizable también... ¿Se puede construir desde
vba
> un
> > > SP
> > > > en
> > > > > ese momento y ejecutarlo?
> > > > >
> > > > > saludos
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Miguel Egea
15/07/2003 - 15:13 | Informe spam
espera un momentito que hay formas sin hacerlo dinámico :-) es a través de
set rowcount, por eso quería ponerlo como un artículillo.
Esta tarde lo publico sin falta


Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"Carlos Sacristan" <csacristanARROBAocasoPUNTOes> escribió en el mensaje
news:#

Yo me refería a ejecutarla dinámicamente dentro del procedimiento
almacenado. De hecho, si al final lo haces de la forma que estamos
comentando, tendrás que ejecutar dinámicamente dos sentencias, una para
devolver los resultados:

EXEC('SELECT TOP ' + @cantidad + ' campo1, campo2, ... FROM ')

y la otra para actualizar los registros, tal que así:

EXEC('UPDATE tuTabla SET campo=valor FROM tuTabla a INNER JOIN (SELECT
TOP ' + @cantidad + ' campo1, campo2, ... FROM ...) b ON a.elID = b.elID')


De todos modos, esta opción no me gusta mucho, lo que ocurre es que


hoy
estoy bastante liado y no puedo pensar en algo mejor :( A ver si


mañana
tengo un ratillo y le echo una pensada


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm

"iDeafix" escribió en el mensaje
news:bf0pt8$9napd$
> Si, si, Carlos, si esa es la cuestión ¿como se construye y ejecuta
> dinámicamente?
> hasta ahora en mdb lo había resuelto más o menos así con createquerydef,
> pero ya no funciona
>
> Dim qry As Object
>
> cc1 = "SELECT TOP "
> cc2 = CStr(Forms!Asignacion30!Cantidad)
> cc3 = " [Clientes].* FROM ...
>
> cc = cc1 & cc2 & cc3 & ...
>
> Set qry = CurrentDb.CreateQueryDef("Carga General Vista Previa", cc)
>
>
> Esta consulta, después era usada como fuente para crear una tabla


temporal
> (y de paso podía usarla como vista previa del proceso, que no te engañe


el
> nombre "Carga General Vista Previa").
>
> Pero ahora con ADP, la creación de la consulta se supone que habrá que
> hacerla de otra forma, por ADO me imagino...
> Además ya no puedo usar tablas temporales locales al usuario (y no me
> gustaría crearlas en el servidor).
>
>
>
> "Carlos Sacristan" <csacristanARROBAocasoPUNTOes> escribió en el mensaje
> news:#
> >
> > El parámetro para TOP no puede ser una variable, o sea que si
> necesitas
> > que eso sea así tendrás que construir y ejecutar dinámicamente la
> sentencia
> >
> >
> >
> > Un saludo
> >
> > -
> > "Sólo sé que no sé nada. " (Sócrates)
> >
> > Por favor, responder únicamente al foro
> >
> > (Guía de netiquette del foro)
> > http://www.helpdna.net/bosqlfaq00.htm
> > http://perso.wanadoo.es/rubenvigon/foro
> >
> > (FAQ's de SQL Server)
> > http://support.microsoft.com/defaul.../70faq.asp
> > http://www.helpdna.net/bosqlfaq.htm
> >
> > "iDeafix" escribió en el mensaje
> > news:bf0on6$9rplh$
> > > No, no me he explicado bien. Trataba de ser didáctico dividiendo el
> > problema
> > > en dos partes y he conseguido lo contrario.
> > >
> > > Sólo necesito hacer una acción: Actualizar el campo "procesado" a X


de
> los
> > > clientes que cumplan el criterio "provincia".
> > >
> > > ¿Y como construyo un SP cuyo SELECT TOP X es variable en función de


lo
> que
> > > el usuario escriba en el form? He aqui la cuestión
> > >
> > >
> > >
> > > "Carlos Sacristan" <csacristanARROBAocasoPUNTOes> escribió en el
mensaje
> > > news:
> > > >
> > > > En tu procedimiento podrías hacer las dos cosas: actualizar y
> luego
> > > > devolver los resultados...
> > > >
> > > >
> > > >
> > > > Un saludo
> > > >
> > > > -
> > > > "Sólo sé que no sé nada. " (Sócrates)
> > > >
> > > > Por favor, responder únicamente al foro
> > > >
> > > > (Guía de netiquette del foro)
> > > > http://www.helpdna.net/bosqlfaq00.htm
> > > > http://perso.wanadoo.es/rubenvigon/foro
> > > >
> > > > (FAQ's de SQL Server)
> > > >
http://support.microsoft.com/defaul.../70faq.asp
> > > > http://www.helpdna.net/bosqlfaq.htm
> > > >
> > > > "iDeafix" escribió en el mensaje
> > > > news:bf0hfj$9rbs5$
> > > > > Hola
> > > > >
> > > > > Tengo un form con dos campos: miprovincia y micantidad.
> > > > >
> > > > > El objetivo es ir a la tabla de clientes y seleccionar tantos


como
> > diga
> > > > > "micantidad" y que sean de "miprovincia".
> > > > >
> > > > > A estos clientes se les debe poner a "Verdadero" su campo
> > "procesado".
> > > > Así
> > > > > sabemos que han sido seleccionados en ejecuciones anteriores.
> > > > >
> > > > > No sé por donde empezar. Como requiere parámetros tendría que


ser
un
> > SP,
> > > > > pero debe ser actualizable también... ¿Se puede construir desde
vba
> un
> > > SP
> > > > en
> > > > > ese momento y ejecutarlo?
> > > > >
> > > > > saludos
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#8 Miguel Egea
15/07/2003 - 21:39 | Informe spam
jeje, me has leido el pensamiento, pero espero que no lo quiten aún, en el
artículo que estoy publicando en portalsql, he seguido una serie de pasos y
lleva a que set rowcount es mas eficiente que select top al menos en cuanto
a los planes de ejecución se refiere, lecturas hace las mismas pero permite
reusar planes de ejecución.


Un Saludo
Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

"Javier Loria(MVP)" escribió en el mensaje
news:
Hola Miguel:
Solo por si acaso, toma en cuenta que el SET ROWCOUNT va de salida.
Tomado de los BOL:
> Observaciones
Es recomendable que las instrucciones DELETE, INSERT y UPDATE que
actualmente utilizan SET ROWCOUNT se vuelvan a escribir con la sintaxis


TOP.
Para obtener más información, consulte DELETE, INSERT o UPDATE.
>
Saludos,


Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
> espera un momentito que hay formas sin hacerlo dinámico :-) es a
> través de set rowcount, por eso quería ponerlo como un artículillo.
> Esta tarde lo publico sin falta
>
>
>
> Saludos
> Miguel Egea
> http://www.portalsql.com
> Sql-Server MVP
> "Carlos Sacristan" <csacristanARROBAocasoPUNTOes> escribió en el
> mensaje news:#
>>
>> Yo me refería a ejecutarla dinámicamente dentro del procedimiento
>> almacenado. De hecho, si al final lo haces de la forma que estamos
>> comentando, tendrás que ejecutar dinámicamente dos sentencias, una
>> para devolver los resultados:
>>
>> EXEC('SELECT TOP ' + @cantidad + ' campo1, campo2, ... FROM
>> ')
>>
>> y la otra para actualizar los registros, tal que así:
>>
>> EXEC('UPDATE tuTabla SET campo=valor FROM tuTabla a INNER JOIN
>> (SELECT TOP ' + @cantidad + ' campo1, campo2, ... FROM ...) b ON
>> a.elID = b.elID')
>>
>>
>> De todos modos, esta opción no me gusta mucho, lo que ocurre es
>> que hoy estoy bastante liado y no puedo pensar en algo mejor :(
>> A ver si mañana tengo un ratillo y le echo una pensada
>>
>>
>> Un saludo
>>
>> -
>> "Sólo sé que no sé nada. " (Sócrates)
>>
>> Por favor, responder únicamente al foro
>>
>> (Guía de netiquette del foro)
>> http://www.helpdna.net/bosqlfaq00.htm
>> http://perso.wanadoo.es/rubenvigon/foro
>>
>> (FAQ's de SQL Server)
>> http://support.microsoft.com/defaul.../70faq.asp
>> http://www.helpdna.net/bosqlfaq.htm
>>
>> "iDeafix" escribió en el mensaje
>> news:bf0pt8$9napd$
>>> Si, si, Carlos, si esa es la cuestión ¿como se construye y ejecuta
>>> dinámicamente?
>>> hasta ahora en mdb lo había resuelto más o menos así con
>>> createquerydef, pero ya no funciona
>>>
>>> Dim qry As Object
>>>
>>> cc1 = "SELECT TOP "
>>> cc2 = CStr(Forms!Asignacion30!Cantidad)
>>> cc3 = " [Clientes].* FROM ...
>>>
>>> cc = cc1 & cc2 & cc3 & ...
>>>
>>> Set qry = CurrentDb.CreateQueryDef("Carga General Vista Previa", cc)
>>>
>>>
>>> Esta consulta, después era usada como fuente para crear una tabla
>>> temporal (y de paso podía usarla como vista previa del proceso, que
>>> no te engañe el nombre "Carga General Vista Previa").
>>>
>>> Pero ahora con ADP, la creación de la consulta se supone que habrá
>>> que hacerla de otra forma, por ADO me imagino...
>>> Además ya no puedo usar tablas temporales locales al usuario (y no
>>> me gustaría crearlas en el servidor).
>>>
>>>
>>>
>>> "Carlos Sacristan" <csacristanARROBAocasoPUNTOes> escribió en el
>>> mensaje news:#
>>>>
>>>> El parámetro para TOP no puede ser una variable, o sea que si
>>>> necesitas que eso sea así tendrás que construir y ejecutar
>>>> dinámicamente la sentencia
>>>>
>>>>
>>>>
>>>> Un saludo
>>>>
>>>> -
>>>> "Sólo sé que no sé nada. " (Sócrates)
>>>>
>>>> Por favor, responder únicamente al foro
>>>>
>>>> (Guía de netiquette del foro)
>>>> http://www.helpdna.net/bosqlfaq00.htm
>>>> http://perso.wanadoo.es/rubenvigon/foro
>>>>
>>>> (FAQ's de SQL Server)
>>>> http://support.microsoft.com/defaul.../70faq.asp
>>>> http://www.helpdna.net/bosqlfaq.htm
>>>>
>>>> "iDeafix" escribió en el mensaje
>>>> news:bf0on6$9rplh$
>>>>> No, no me he explicado bien. Trataba de ser didáctico dividiendo
>>>>> el problema en dos partes y he conseguido lo contrario.
>>>>>
>>>>> Sólo necesito hacer una acción: Actualizar el campo "procesado" a
>>>>> X de los clientes que cumplan el criterio "provincia".
>>>>>
>>>>> ¿Y como construyo un SP cuyo SELECT TOP X es variable en función
>>>>> de lo que el usuario escriba en el form? He aqui la cuestión
>>>>>
>>>>>
>>>>>
>>>>> "Carlos Sacristan" <csacristanARROBAocasoPUNTOes> escribió en el
>>>>> mensaje news:
>>>>>>
>>>>>> En tu procedimiento podrías hacer las dos cosas: actualizar
>>>>>> y luego devolver los resultados...
>>>>>>
>>>>>>
>>>>>>
>>>>>> Un saludo
>>>>>>
>>>>>> -
>>>>>> "Sólo sé que no sé nada. " (Sócrates)
>>>>>>
>>>>>> Por favor, responder únicamente al foro
>>>>>>
>>>>>> (Guía de netiquette del foro)
>>>>>> http://www.helpdna.net/bosqlfaq00.htm
>>>>>> http://perso.wanadoo.es/rubenvigon/foro
>>>>>>
>>>>>> (FAQ's de SQL Server)
>>>>>>
>> http://support.microsoft.com/defaul.../70faq.asp
>>>>>> http://www.helpdna.net/bosqlfaq.htm
>>>>>>
>>>>>> "iDeafix" escribió en el mensaje
>>>>>> news:bf0hfj$9rbs5$
>>>>>>> Hola
>>>>>>>
>>>>>>> Tengo un form con dos campos: miprovincia y micantidad.
>>>>>>>
>>>>>>> El objetivo es ir a la tabla de clientes y seleccionar tantos
>>>>>>> como diga "micantidad" y que sean de "miprovincia".
>>>>>>>
>>>>>>> A estos clientes se les debe poner a "Verdadero" su campo
>>>>>>> "procesado". Así sabemos que han sido seleccionados en
>>>>>>> ejecuciones anteriores.
>>>>>>>
>>>>>>> No sé por donde empezar. Como requiere parámetros tendría que
> ser
>> un
>>>> SP,
>>>>>>> pero debe ser actualizable también... ¿Se puede construir desde
>> vba
>>> un
>>>>> SP
>>>>>> en
>>>>>>> ese momento y ejecutarlo?
>>>>>>>
>>>>>>> saludos


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida