SQL Server - Como obtener una estructura

   
Vista:

Como obtener una estructura

Publicado por Andres (27 intervenciones) el 29/03/2010 21:51:05
Buenas gente

Necesito hacer un store procedure con lo siguiente:

1-Leer la estructura de una tabla determinada

2-Usar esa estructura para crear un variable tipo Table o en ultima instancia un tabla temporal

gracias de ante mano
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
Imágen de perfil de roger

RE:Como obtener una estructura

Publicado por roger (173 intervenciones) el 30/03/2010 00:44:34
y seria como para que?

CREATE procedure createTabla @nombreTabla varchar(200)
AS
BEGIN
EXEC('select * into tablaTemporal from ' + @nombreTabla)
select * from tablaTemporal
drop table tablaTemporal
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

RE:Como obtener una estructura

Publicado por Andres (27 intervenciones) el 30/03/2010 14:53:13
Hola roger

La idea es poder exportar un archivo de texto que tiene los datos de una tabla previamente importada, lo que quiero hacer es:

1-pasar por parametro el nombre de una tabla conocida
2-crear un variable tipo cursor segun la tabla que me interesa
3-alimentar esa tabla cursor con los datos del archivo de texto para manipular con calculos especificos
4-el resultado del calculo actualizar una tabla final
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:Como obtener una estructura

Publicado por Tiburoncin (9 intervenciones) el 30/03/2010 15:39:58
Te recomiendo que leas como ejecutar el comando BCP

Ojala te sirva
Salu2
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:Como obtener una estructura

Publicado por Andres (27 intervenciones) el 31/03/2010 14:42:40
Hola gente
Tengo 2 problemas con este codigo

1 - si incluyo @lon en la linea Set @cadena = @cadena + @col+' '+ @typ+' '+@lon+',' no me arma @cadena

2 - Me da error en select * from @TblTmp dice que debo declarar @TmpTbl

Gracias por la ayuda


-- @Tbl = tabla que deseo actualizar
-----------------------------------------------
declare @Tbl varchar(max)
set @Tbl = 'TABLA'
----------------------------------------------

declare @col varchar(max)
declare @typ varchar(max)
declare @lon varchar(max)
declare @Index int
declare @Max int
declare @cadena varchar(max)

Set @cadena = 'declare @TblTmp table('
Select @Max = max(ordinal_position)
From INFORMATION_SCHEMA.COLUMNS
Where table_name = @Tbl
Set @Index = 1

While @index <= @max
Begin
SELECT
@col = column_name,
@typ = data_type,
@lon = character_maximum_length
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = @Tbl
AND ordinal_position = @index

Set @cadena = @cadena + @col+' '+ @typ+' '+@lon+','
Set @Index = @Index + 1
End
Set @cadena = SUBSTRING(@cadena ,1,len(@cadena)-1 )
Set @cadena= @cadena+')'

execute(@cadena)

select * from @TblTmp
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
Imágen de perfil de roger

RE:Como obtener una estructura

Publicado por roger (173 intervenciones) el 31/03/2010 15:01:03
lo que se ejecuta dentro de la expresion execute(@cadena) queda en ese contexto por lo cual no se puede hacer referencia a la variable tipo tabla creada en el query dinamico por fuera del query dinamico.
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:Como obtener una estructura

Publicado por andres (27 intervenciones) el 31/03/2010 15:49:47
existe alguna manera de hacerlo sin usar tablas temporales?
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
Imágen de perfil de roger

RE:Como obtener una estructura

Publicado por roger (173 intervenciones) el 31/03/2010 16:10:49
es que inclusive con tabla temporal tampoco te sirve, tendria que ser tabla temporal global (las que llevan ##nombreTabla), pero no seria mejor que incluyas el select en el query dinamico?
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:Como obtener una estructura

Publicado por andres (27 intervenciones) el 31/03/2010 18:50:20
seguramente funcionaria el select, pero en realidad el fin que persigo es utilzar el BCP con la tabla cursor, y luego devolver esa tabla cursor como una variable de salida tipo XML... parece que quede trabado en el execute.
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
Imágen de perfil de roger

RE:Como obtener una estructura

Publicado por roger (173 intervenciones) el 30/03/2010 16:47:31
pero no entiendo para que el pasar la tabla como parametro (como para hacerlo dinamico) si de todas formas los calculos son especificos segun la tabla que sea. En realidad no entiendo bien cual es el objetivo final, porque para cargas por codigo normalmente se usa lo que te comenta el compañero, el comando BCP o los bulkinsert
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:Como obtener una estructura

Publicado por Andres (27 intervenciones) el 30/03/2010 20:05:43
Es posible que este equivocado o no me he dado a entender correctamente.
Mi intencion es crear un SP 2 reutilizable

Bien en el SP2 podria pasarle por ejemplo estos parametros:
@Dat = donde se encuentra la tabla a actualizar
@Tbl = tabla que deseo actualizar
@Pth = path donde se encuentra el archivo plano
@Fil = nombre de archivo plano
@Ext = extension del archivo plano

Este SP2 terminará alimentando una variable tipo tabla que actualizará la tabla final... ya se, me diran, porque utilizas una variable tipo Table en el medio en vez de actualizar directamente la tabla... bueno, mi intencion es encontrar la manera de devolver el resultado como parametro sin crear tablas temporales... o sea el SP2 levantaria el dato desde el TXT en una variabler tipo tabla y devolveria el resultado de alguna manera (¿?)... tal vez como tipo XML, no lo se, estoy en experimentacion y aprendiendo al mismo tiempo sobre posibilidades que nunca incursione... acalro que estoy sobre SQL2005

si logro devolver el conjunto de registros desde el SP entonces puedo manipular por medio de calculos desde un SP1 que llamara al SP2.
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