SQL - Crear cursor con campos variables

 
Vista:

Crear cursor con campos variables

Publicado por YoMero (2 intervenciones) el 30/05/2007 00:21:56
Hola a todos...

Quisiera me ayudaran con lo siguiente: deseo declarar un cursor para obtener los datos de 2 columnas en una tabla y esos datos insertarlos en otra junto con otros valores que mando por parámetros. El problema reside que uno de los dos campos de la tabla es un campo variable, no es fijo, ese nombre de campo lo envio al igual como un parámetro:

DECLARE MiCursor CURSOR FOR

SELECT Id, @Campo --Este campo lo mando como parametro
FROM MiTabla --Tabla que contiene varios campos

OPEN ObtieneCortes

FETCH NEXT FROM MiCursor INTO @Id, @Valor

WHILE @@FETCH_STATUS = 0
BEGIN

INSERT INTO Mitabla2
(Id, Valor, año, grupo, tipo)

VALUES (@Id,@Valor,@Anio,@Grupo, @Tipo)

FETCH NEXT FROM MiCursor INTO @Id, @Valor
END

CLOSE MiCursor

DEALLOCATE MiCursor

La cuestion única es: ¿como puedo hacerle para que en mi cursor se me permita utilizar los campos variables?

Saludos...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Crear cursor con campos variables

Publicado por Isaías (5072 intervenciones) el 30/05/2007 00:42:12
Veamos

El campo variable, ¿Siempre es del mismo tipo o tambien varia?

Te lo pregunto, porque en algun lado declaras @Valor, donde se alojara el valor del campo variable, entonces, debo suponer que siempre es del mismo tipo, ¿cierto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crear cursor con campos variables

Publicado por YoMero (2 intervenciones) el 30/05/2007 16:20:15
La idea es indicar de que campo de la tabla MiTabla quiero sacar los valores, estos valores los almaceno en otra tabla junto con otros valores que recibo como parámetros. He aqui el procedimiento completo...

ALTER PROCEDURE dbo.sp_ObtieneCursor
(
@Campo AS VARCHAR(8),
@Anio AS INT,
@Grupo AS INT,
@Tipo AS INT
)

AS

DECLARE @Valor AS INT

DECLARE MiCursor CURSOR FOR

SELECT Id, @Campo --Este campo lo mando como parametro
FROM MiTabla --Tabla que contiene varios campos

OPEN ObtieneCortes

FETCH NEXT FROM MiCursor INTO @Id, @Valor

WHILE @@FETCH_STATUS = 0
BEGIN

INSERT INTO Mitabla2
(Id, Valor, anio, grupo, tipo)

VALUES (@Id,@Valor,@Anio,@Grupo, @Tipo) -- los tres últimos parámetros son fijos y los recibo como parámetros de entrada en el procedimiento

FETCH NEXT FROM MiCursor INTO @Id, @Valor
END

CLOSE MiCursor

DEALLOCATE MiCursor

Como ves, efectivamente @Valor lo utilizo para almacenar el contenido del campo variable, el campo que se me indica como parámetro de entrada y @Id contendrá el valor del campo fijo de la tabla MiTabla. Un esquema de las tablas sería aproximandamente algo así:

Tabla Original MiTabla
|----------------------------- Posibles campos a utilizar ----------------------------|
Id | Campo1 | Campo2 | Campo3 | Campo4 | Campo5 | Campo6
1 345 654 334 12 754 4545
2 34 1 434 54 12 5
3 787 342 54 23 12 1

Tabla Resultado

Id | Valor | Anio | Grupo | Tipo
1 345 1994 1 2 -|
2 34 1994 1 2 | Valores del Campo1
3 787 1994 1 2 -|
... ... .... ... ... ...
1 12 2000 3 1 -|
2 54 2000 3 1 | Valores del Campo 4
3 23 2000 3 1 -|

Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Crear cursor con campos variables

Publicado por Isaías (5072 intervenciones) el 31/05/2007 01:05:11
No requieres de un CURSOR, para hacer dicho trabajo, prueba asi:

ALTER PROCEDURE dbo.sp_ObtieneCursor
(
@Campo AS VARCHAR(8),
@Anio AS INT,
@Grupo AS INT,
@Tipo AS INT
)

AS
BEGIN
SET NOCOUNT ON
DECLARE @SQLString NVARCHAR(1000)
SET @SQLString = N'SELECT id,'+ltrim(rtrim(@Campo))+','+cast(@Anio as varchar)+','+cast(@Grupo as varchar)+','+cast(@Tipo as varchar)+
' FROM MiTabla'
-- SELECT @SQLString -- Solo para revisar como se arma el query
INSERT INTO Mitabla2 (Id, Valor, anio, grupo, tipo)
EXECUTE sp_executesql @SQLString
END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar