Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   procedimientos almacenados (https://www.clubdelphi.com/foros/showthread.php?t=37309)

davidgaldo 09-11-2006 08:09:15

procedimientos almacenados
 
Hola, tengo un procedimientos almacenado:

Código SQL [-]
CREATE PROCEDURE [dbo].[Buscar_disponibilidad]  (@fechaent smalldatetime,@fechasal smalldatetime,@codhab char(10))
AS
begin transaction
select @codhab from [0001] where fecha>=@fechaent and fecha<=@fechasal
commit
GO

y resulta que cuando le paso los parametros, la consulta me devuelve siempre el nombre de la columna en lugar de los datos que contiene, como puedo hacer para que me devuelva los datos??

oscarnoe 09-11-2006 12:11:00

Hola David,

Puedes dar mas datos sobre lo que pretendes con ese SP? Asi como un poco de la estructura de la tabla que lees.
Por de pronto yo veo que seleccionas @codhab, no haces referencia a ningun campo de la tabla.

Espero que te sea de ayuda.

Oscar Noe

davidgaldo 09-11-2006 13:27:28

lo que quiero es mostras la columna con todas sus filas, la tabla es la siguiente:

FECHA,TIPOA,TIPOB,TIPOC

y quiero que el procedimiento me devuelva la columna que yo quiero y las filas que me cumplan las fechas que le paso.

oscarnoe 09-11-2006 14:13:15

Pues lo mejor sera que el SP use SQL dinamico (te remito al procedimiento almacenado sp_executesql, que te permitira hacer lo que pides).
Estuve mirando la posibilidad de usar el tipo sysname ( = nvarchar(128)), pero hice una prueba y obtuve el mismo resultado.

Ejemplo
Código SQL [-]
CREATE PROCEDURE [dbo].[Buscar_disponibilidad]  (@fechaent smalldatetime,@fechasal smalldatetime,@codhab sysname)
AS
begin transaction
  declare @tsql nvarchar(4000)
  set @tsql = 'select '+char(13)+@codhab+char(13)+' from [0001]'+char(13)+'where fecha>= '''+
  convert(varchar(20),@fechaent)+  ''' and fecha<='''+convert(varchar(20),@fechasal)+''''
  exec sp_executesql @tsql
commit

A partir de ahi, lo que tu quieras complicarlo...

Espero que te sea de ayuda...

Oscar Noe

davidgaldo 09-11-2006 16:22:17

Y para hacer un update con @codhab como seria?

oscarnoe 09-11-2006 16:54:17

... mas de lo mismo... un update normal y corriente

Ejemplo

Código SQL [-]
CREATE PROCEDURE [dbo].[Actualizar_disponibilidad]  (@fechaent smalldatetime,@fechasal smalldatetime,@codhab sysname, @codhabVALUE float)
AS
begin transaction
  declare @tsql nvarchar(4000)
  set @tsql = 'update [0001] set  '+char(13)+@codhab+'='+ Cast(@codhabValue as varchar(20))+char(13)+' where fecha>= '''+
  convert(varchar(20),@fechaent)+  ''' and fecha<='''+convert(varchar(20),@fechasal)+''''
  exec sp_executesql @tsql
commit

No se que tipo de datos tiene @codhabValue, le puse float. Al gusto de cada uno. Si es un tipo cadena recuerda ponerle las comillas simples antes, como lo hice en los campos de fecha.

Es lo mismo construir una query dinamica en delphi que en T-SQL solo que debes adaptarte a cada uno. Las comillas es un buen ejemplo del tema, y provoca mas de un error, segun el tipo de dato las necesite o no.

A partir de ahi, lo que tu quieras complicarlo...

Espero que te sea de ayuda...

Oscar Noe

davidgaldo 09-11-2006 17:16:58

pq sqlserver me guarda las fechas al reves, primero el mes y luego el día,
ya que al buscar mediante una consulta tengo que invertir el formato?

oscarnoe 09-11-2006 17:28:33

esa pregunta se merece un hilo nuevo.


La franja horaria es GMT +2. Ahora son las 11:36:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi