Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Store Procedure

Estas en el tema de Store Procedure en el foro de SQL Server en Foros del Web. Hola a todos: Quiero crear un store procedure, pero tengo las siguientes preguntas...soy nueva haciendo esto. 1.- Si requiero 2 campos en la consulta del ...
  #1 (permalink)  
Antiguo 19/01/2010, 13:48
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Store Procedure

Hola a todos:

Quiero crear un store procedure, pero tengo las siguientes preguntas...soy nueva haciendo esto.
1.- Si requiero 2 campos en la consulta del store procedure ¿Como puedo acceder a ellos?

EJ:

CREATE PROCEDURE Clientes_GetAll
AS
SELECT Id, Nombre FROM dbo.Clientes

¿Como puedo accesar desde SQL al campo Id y al campo nombre?. Vaya en Visual Basic, puedo crear un recordset y obtener esos valores, pero en el store procedure ¿Como puedo hacerlo?

2.- Si quiero recorrer todos los registros del mismo SELECT (suponiendo que me regrese más de uno) Como puedo hacerlo.

Ojala me puedan ayudar

Saludos...
  #2 (permalink)  
Antiguo 19/01/2010, 14:05
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Store Procedure

Me late que tú necesitas evaluar registro a registro algún valor de tu tabla. Para eso podrías usar un cursor, pero no se recomienda usarlo.
Mejor dinos que necesitas hacer exactamente.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 19/01/2010, 15:03
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Store Procedure

Hola Flaviovich:

En efecto requiero manejar bastante informacion, de hecho ya lo tengo en mi aplicativo con recordset, sin embargo queria saber si se puede via Store procedure para agilizar el acceso a la informacion.
Basicamente es un mantenimiento de la base de datos, en la cual cada determinado tiempo debo borrar informacion que ya no se ocupa y por logica son varios registros.

Saludos...
  #4 (permalink)  
Antiguo 19/01/2010, 17:56
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Store Procedure

OK, ese tipo de procedimientos se deben ejecutar en la misma BD.
Cual es la logica o criterio para borrar dicha informacion?
Muestranos tu tabla la estructura o algunos registros de ejemplo.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 20/01/2010, 12:52
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Store Procedure

Ok: Mira el proceso te lo voy a explicar mas o menos. Con un pequeño ejemplo:

Tengo 3 tablas:

Ventas
Detalle de ventas
Detalle de pagos

Esto esta en una base de datos en la tienda. La base de datos es operativa. La idea es mantener esta base de datos con tan solo 3 meses de informacion, es decir, si estamos en enero tener la informacion solamente de Noviembre, Diciembre y Enero. esto para que el acceso a datos sea más rapido. y la respuesta del servidor tambien.

Mi aplicacion ya tiene una herramienta que verifica las fechas y borra la informacion tres meses hacia atras. Ahora, el detalle es el siguiente, dependiendo de la epoca del año, la base de datos crece esto debido a las ventas que hay en la misma. En ocasiones el servidor me indica el siguiente error cuando corro esta aplicacion desde la aplicacion. "Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding", por lo mismo la informacion se va quedando resagada y llega un momento en el que esa informacion al no depurarse se vuelve "basura". Ahora bien, yo pense que puedo crear un store procedure en la base de datos que haga toda la funcion que realiza el aplicativo, esto con el fin de mejorar el performance y evitar en medida de lo posible el error. Un ejemplo de lo que hago es:

Tabla Ventas:

Venta (PK)
Cliente
Importe
Descuento
Impuesto
Fecha

Tabla Detalle de venta
id (PK)
Venta(FK)
Articulo
Cantidad
Precio Unitario
Descuento
Impuesto

Tabla detalle de pagos
id(PK)
Venta (FK)
Forma de pago
Monto del pago
Ingreso/Egreso
Fecha

Mi aplicativo hace mas o menos lo siguiente

Dim recordsetVenta As ADODB.Recordset
Dim recordsetDetalle As ADODB.Recordset
Dim recordsetPagos As ADODB.Recordset

Set recordsetVenta = New ADODB.Recordset
recordsetVenta.CursorType = adOpenForwardOnly
recordsetVenta.LockType = adLockReadOnly

recordsetVenta.Open "SELECT venta FROM ventas WHERE fecha <= '" & Date - 100 & "'", Connection, , , adCmdText

While Not recordsetVenta.EOF
Set recordsetDetalle = New ADODB.Recordset
recordsetDetalle.CursorType = adOpenForwardOnly
recordsetDetalle.LockType = adLockReadOnly

recordsetDetalle.Open "SELECT * FROM [detalle venta] WHERE venta = " & recordsetVenta("venta"), Connection, , , adCmdText

If Not recordsetDetalle.EOF Then
Connection.Execute "DELETE FROM [detalle venta] WHERE venta = "& recordsetVenta("venta")
End If

Set recordsetPagos = New ADODB.Recordset
recordsetPagos.CursorType = adOpenForwardOnly
recordsetPagos.LockType = adLockReadOnly

recordsetPagos.Open "SELECT * FROM [detalle pagos] WHERE venta = " & recordsetVenta("venta"), Connection, , , adCmdText

If Not recordsetPagos.EOF Then
Connection.Execute "DELETE FROM [detalle pagos] WHERE venta = "& recordsetVenta("venta")
End If

Connection.Execute "DELETE FROM [ventas] WHERE venta = "& recordsetVenta("venta")

recordsetVenta.MoveNext
Wend


Estoy simulando una operacion muy sencilla, realmente la base de datos interactua con mas tablas y básicamente ese es el concepto. ¿Tienes alguna sugerencia?
  #6 (permalink)  
Antiguo 20/01/2010, 14:02
 
Fecha de Ingreso: agosto-2009
Ubicación: Jalisco,Mexico
Mensajes: 28
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Store Procedure

1.- si haces un procedimento puedes usar lo siguiente para crear un record set de él

set SqlRS = server.CreateObject("ADODB.RecordSet")
set SqlRS = SqlConn.Execute("procedimiento")

2.- En caso de que te regrese varios datos puedes verlos del mismo modo como si fuera cualquier recordset ejemplo

Do While NOT SqlRS.EOF

SqlRS.MoveNext
Loop


Espero que te sirva
  #7 (permalink)  
Antiguo 20/01/2010, 14:12
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Store Procedure

Probaré la sugerencia

Gracias
  #8 (permalink)  
Antiguo 20/01/2010, 14:43
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Store Procedure

¿Porque involucrar un aplicativo y no usar los JOB's para crear un procedimiento que se ejecute todos los dias y solo deje la informacion de 3 meses?

Si el procedimiento esta bien creado, debera borrar, solo la informacion DE UN DIA a la vez.

Y el decir BORRAR, quiere decir, enviar a HISTORICOS la informacion que no se desea tener en linea.
  #9 (permalink)  
Antiguo 20/01/2010, 16:25
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Respuesta: Store Procedure

Hola iislas:

Gracias por la recomendacion, como lo dije al inicio no he trabajo mucho a nivel administracion del server, por que no sabia sobre los JOB's, pero comenzaré a investigar y espero mañana poder comentarle como me fue.
Saludos....
  #10 (permalink)  
Antiguo 21/01/2010, 11:23
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Store Procedure

Ademas recuerda, que cuando hablamos de "ELIMINAR" informacion de forma masiva (tu caso), deberia ser de forma BATCH, esto es, hacer una especie de WHILE y hacer un "borrado" por "tantos" de registros.

Saludos

Etiquetas: procedure, store
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:18.