Autor
|
Tema: Como hacer un select de un update? (MSSQL) (Leído 6,756 veces)
|
WHK
|
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
|
Resuelto commandSQL = new SqlCommand (@" DECLARE @id int; SET @id = (select top(1) id from [table] where [x] = 0 order by id desc); select * from [table] where id = @id; update [table] set [x] = 20 where id = @id; ");
|
|
|
En línea
|
|
|
|
|
WHK
|
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
Mensajes: 1.186
|
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 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
Mensajes: 195
|
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
|
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
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Cómo hacer esta consulta en MySql: Select distinct...
Bases de Datos
|
orion180
|
2
|
8,604
|
21 Septiembre 2011, 20:10 pm
por fran800m
|
|
|
SELECT junto con update sql injection
Nivel Web
|
wizache
|
2
|
6,502
|
29 Diciembre 2007, 22:36 pm
por H3xCryp
|
|
|
Inyeccion SQL (mysql) UPDATE dentro de un SELECT
« 1 2 »
Nivel Web
|
odeONeSs
|
14
|
19,970
|
27 Febrero 2009, 17:40 pm
por OzX
|
|
|
Como hacer update en SQLinjection
Nivel Web
|
BlackHKR
|
6
|
6,491
|
12 Mayo 2010, 20:55 pm
por BHK
|
|
|
¿Cómo funciona select() en c?
Programación C/C++
|
mester
|
4
|
5,157
|
22 Noviembre 2015, 22:11 pm
por mester
|
|