elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Como hacer un select de un update? (MSSQL)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como hacer un select de un update? (MSSQL)  (Leído 6,475 veces)
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Como hacer un select de un update? (MSSQL)
« en: 19 Julio 2013, 17:37 pm »

Hola, tengo dos consultas sql que quiero migrar a una sola pero no tengo claro como hacerlo.

Necesito seleccionar el primer item de una tabla donde cuenta = 0 pero al mismo tiempo necesito que se actualize a 1 pero retornando la fila completa.

Es algo como esto:

[tabla] = select top(1) * from [tabla] where cuenta = 0 order by desc
update [tabla] set cuenta = 1 where [id] = [tabla].[id]

Desde .NET procesaré los datos de [tabla] sobre una grilla.

Por lo tanto necesito retornar valores aun haciendo un update. No importa si tengo que utilizar ";" o cualquier cosa menos una tabla temporal.

Alguien sabe como podría hacerlo en una sola consulta?


En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Como hacer un select de un update? (MSSQL)
« Respuesta #1 en: 19 Julio 2013, 20:12 pm »

Resuelto :)

Código
  1. commandSQL = new SqlCommand(@"
  2. DECLARE @id int;
  3. SET @id = (select top(1) id from [table] where [x] = 0 order by id desc);
  4. select * from [table] where id = @id;
  5. update [table] set [x] = 20 where id = @id;
  6. ");


En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Como hacer un select de un update? (MSSQL)
« Respuesta #2 en: 19 Julio 2013, 20:37 pm »

Una pregunta.

Por qué razón no optaste por hacer un procedure o dos query?, supongo que alguna razón debe haber.

Había encontrado algo parecido a tu resultado xD pero me ganaste.

http://www.codeproject.com/Questions/173387/Update-and-select-the-column-in-a-single-query-in

Saludos
« Última modificación: 22 Julio 2013, 17:51 pm por Darhius » En línea

abc
WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Como hacer un select de un update? (MSSQL)
« Respuesta #3 en: 22 Julio 2013, 15:43 pm »

el problema de hacer dos querys es que tienes dos conexiones y mucha mas cantidad de lineas en .net , en cambio una sola query hace que el codigo se vea mas ordenado y con una sola conexión hacia la db sin tener que hacer bloqueos (costumbre de usar mysql).

hacer un procedure es practicamente lo mismo, tendría que hacer el procedimiento dos veces o hacer uno grande y despues llamarlo desde el código, al final es lo mismo pero con mas trabajo y con mas código.

Para que tanto lio si es posible hacer todo llamando una unica query directa?

Alguien me puede decir que beneficios tiene hacer un procedimiento almacenado v/s hacerlo directo en el código?
En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Como hacer un select de un update? (MSSQL)
« Respuesta #4 en: 22 Julio 2013, 18:06 pm »


De lo único que sé y me consta es lo siguiente:

Mayor capacidad de seguridad (cifrado y limitación de privilegios)
Código precompilado
Reutilización
Performance  ;D
Programación (básica)
Acepta parámetros y devuelve valores.
Multi-instrucciones.

La verdad es que veo más ventajas que desventajas.

Saludos.
En línea

abc
s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Como hacer un select de un update? (MSSQL)
« Respuesta #5 en: 25 Julio 2013, 06:07 am »

Un SP igualmente en mi opinion no son del todo factible yo prefiero en mi BD tener solo la informacion, y desde mi aplicacion hacer el manejo de ella, y muchas veces he tenido que migrar entre gestores de bd mysql, mssql, postgres y los sp no son tan faciles de transladar so si son bastantes sp es mucho mas trabajo a hacer, igualmente la seguridad siempre dependera del programador.

La reutilizacion bastaria igualmente creandola como una funcion en nuestro codigo, el performance igualmente se me hace de forma mas sencilla acceder a codigo web que estar checando en la bd y hacer cambios en ella.

Aunque pues al final es como uno se sienta mas comodo.
En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Como hacer un select de un update? (MSSQL)
« Respuesta #6 en: 25 Julio 2013, 15:36 pm »

Le estoy dando una vuelta a linq, se ve bueno pero al final igual usas la conexión sql, veré si sale mas ordenado y productivo que un procedimiento almacenado. Por ahora me quedo con la query pasada directamente sobre el código de .net a traves de un SqlCommand y parámetros.
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Como hacer un select de un update? (MSSQL)
« Respuesta #7 en: 25 Julio 2013, 15:54 pm »

Los SP están precompilados y se agregan al plan de ejecución de MSSQL, por lo cual son más performantes. Por otra parte, no se considera una buena práctica el tener las query directamente en el código de la aplicación.
En lo que respecta a la seguridad que se refiere Darhius, dado que recibes los valores como parámetros de los SP, ayudan a  mitigar los SQL Injections. Adicional a lo anterior, desde MSSQL podrías dar solamente permisos de ejecución de SP a un usuario, con lo cual no podría ejecutar un SELECT de ningún modo que no sea por medio de esos SP, sin tener en cuenta la posibilidad de cifrar su código.

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cómo hacer esta consulta en MySql: Select distinct...
Bases de Datos
orion180 2 8,192 Último mensaje 21 Septiembre 2011, 20:10 pm
por fran800m
SELECT junto con update sql injection
Nivel Web
wizache 2 6,357 Último mensaje 29 Diciembre 2007, 22:36 pm
por H3xCryp
Inyeccion SQL (mysql) UPDATE dentro de un SELECT « 1 2 »
Nivel Web
odeONeSs 14 19,325 Último mensaje 27 Febrero 2009, 17:40 pm
por OzX
Como hacer update en SQLinjection
Nivel Web
BlackHKR 6 6,293 Último mensaje 12 Mayo 2010, 20:55 pm
por BHK
¿Cómo funciona select() en c?
Programación C/C++
mester 4 4,845 Último mensaje 22 Noviembre 2015, 22:11 pm
por mester
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines