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

recuperar Metadatos con cunsulta

Estas en el tema de recuperar Metadatos con cunsulta en el foro de SQL Server en Foros del Web. Hola a todos. Tengo la siguiente necesidad: Necesito hacer una consulta query en SQLSERVER 2003 que me recupere todas las tablas de mi esquema para ...
  #1 (permalink)  
Antiguo 31/07/2009, 10:18
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Pregunta recuperar Metadatos con cunsulta

Hola a todos.
Tengo la siguiente necesidad:

Necesito hacer una consulta query en SQLSERVER 2003 que me recupere todas las tablas de mi esquema para las cuales se cumpla la condición de que, en caso de exisitir el campo mes, este sea = 12.

Como podria hacer esto,

Desde ya muchas gracias.

Saludos
  #2 (permalink)  
Antiguo 31/07/2009, 10: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: recuperar Metadatos con cunsulta

No existe la edicion SQL Server 2003.

Por otro lado, si quieres sacar TODAS tus tablas que tengan la columna "mes", recurre a INFORMATIOIN_SCHEMA

http://msdn.microsoft.com/en-us/library/ms186778.aspx
  #3 (permalink)  
Antiguo 31/07/2009, 10:49
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: recuperar Metadatos con cunsulta

Amplio la informacion.
Ya tengo este quiery que filtra las tablas que contienen la columna mes. ahora solo agregar una condicion para que recupero solo aquellas en que el mes sea igual a 12.

SELECT information_schema.tables.table_name
FROM information_schema.tables INNER JOIN
information_schema.columns ON
information_schema.tables.table_name = information_schema.columns.table_name
WHERE (information_schema.tables.table_name NOT LIKE 'sys%')
AND (information_schema.tables.table_name <> 'dtproperties')
--AND (information_schema.tables.table_name not like 'vie%')
AND (information_schema.tables.table_schema <> 'INFORMATION_SCHEMA')
AND (information_schema.columns.column_name LIKE '%mes%')
AND (information_schema.tables.table_name not like 'VX%')
AND (information_schema.tables.table_name not like 'XX%')
AND (information_schema.tables.table_name not like 'zz%')
ORDER BY information_schema.tables.table_name, information_schema.columns.table_name
  #4 (permalink)  
Antiguo 31/07/2009, 11:26
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: recuperar Metadatos con cunsulta

Asi te sirve?
Código sql:
Ver original
  1. DECLARE @temp TABLE(tabla VARCHAR(255), columna VARCHAR(255))
  2.  
  3. INSERT INTO @temp
  4. SELECT T.TABLE_NAME, C.column_name
  5. FROM information_schema.TABLES T
  6. INNER JOIN information_schema.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME
  7. WHERE T.TABLE_NAME NOT LIKE 'sys%'
  8. AND T.TABLE_NAME <> 'dtproperties'
  9. AND T.table_schema <> 'INFORMATION_SCHEMA'
  10. AND C.column_name LIKE '%mes%'
  11. AND T.TABLE_NAME NOT LIKE 'VX%'
  12. AND T.TABLE_NAME NOT LIKE 'XX%'
  13. AND T.TABLE_NAME NOT LIKE 'zz%'
  14. ORDER BY T.TABLE_NAME, C.TABLE_NAME
  15.  
  16. SELECT 'SELECT * FROM '+tabla+' WHERE '+columna+' = 12' FROM @temp
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 31/07/2009, 11:58
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: recuperar Metadatos con cunsulta

Te agradezco la ayuda, pero no es lo que busco! yo necesito el nombre de las tablas que contienen en el campo mes el valor 12. ya que tengo que luego actualizaralas. i.e.

el query debe retornar el nombre de las tablas que contengan al menos un registro en el cual la columna mes sea igual a 12.

Gracias
  #6 (permalink)  
Antiguo 31/07/2009, 11:59
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Respuesta: recuperar Metadatos con cunsulta

PD. No tiene por que ser un query. puede ser un Store Procedure pero la restriccion es que sea temporal.

Saludos
  #7 (permalink)  
Antiguo 31/07/2009, 12:00
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: recuperar Metadatos con cunsulta

Debes ejecutar el query que te de como resultado:

SELECT 'SELECT * FROM '+tabla+' WHERE '+columna+' = 12' FROM @temp

¿Lo hiciste ya?
  #8 (permalink)  
Antiguo 31/07/2009, 13:50
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: recuperar Metadatos con cunsulta

Esta seguro que no es la mejor solucion, pero funciona:
Código sql:
Ver original
  1. CREATE TABLE #temp(tabla VARCHAR(255))
  2. DECLARE @tabla VARCHAR(255), @columna VARCHAR(255)
  3.  
  4. DECLARE Tablas CURSOR FOR
  5.     SELECT T.TABLE_NAME, C.column_name
  6.     FROM information_schema.TABLES T
  7.     INNER JOIN information_schema.COLUMNS C ON T.TABLE_NAME = C.TABLE_NAME
  8.     WHERE T.TABLE_NAME NOT LIKE 'sys%'
  9.     AND T.TABLE_NAME <> 'dtproperties'
  10.     AND T.table_schema <> 'INFORMATION_SCHEMA'
  11.     AND C.column_name LIKE '%mes%'
  12.     AND T.TABLE_NAME NOT LIKE 'VX%'
  13.     AND T.TABLE_NAME NOT LIKE 'XX%'
  14.     AND T.TABLE_NAME NOT LIKE 'zz%'
  15.     ORDER BY T.TABLE_NAME, C.TABLE_NAME
  16. FOR READ ONLY
  17.  
  18. OPEN Tablas
  19. FETCH NEXT FROM Tablas INTO @tabla, @columna
  20.  
  21. WHILE @@FETCH_STATUS = 0
  22. BEGIN
  23.  
  24.     EXEC('
  25.        IF EXISTS(SELECT 1 FROM '+@tabla+' WHERE '+@columna+' = 12)
  26.            INSERT INTO #temp VALUES('''+@tabla+''')
  27.        ')
  28.     FETCH NEXT FROM Tablas INTO @tabla, @columna
  29. END
  30.  
  31. CLOSE Tablas
  32. DEALLOCATE Tablas
  33.  
  34. SELECT * FROM #temp
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
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 19:19.