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

Consulta SQL. AYUDA

Estas en el tema de Consulta SQL. AYUDA en el foro de SQL Server en Foros del Web. Necesito ayuda con una consulta de SQL Server. yo tengo una lista de tablas (campañas) y o que hago es mostrarlas: SELECT TABLE_NAME AS CAMPAÑAS ...
  #1 (permalink)  
Antiguo 20/07/2010, 06:44
 
Fecha de Ingreso: julio-2010
Mensajes: 93
Antigüedad: 13 años, 9 meses
Puntos: 0
Consulta SQL. AYUDA

Necesito ayuda con una consulta de SQL Server. yo tengo una lista de tablas (campañas) y o que hago es mostrarlas:

SELECT TABLE_NAME AS CAMPAÑAS
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_NAME LIKE 'sccw_%')
AND (TABLE_NAME <> 'sccw_scr_table1')
AND (TABLE_NAME <> 'sccw_prueba_table')
AND (TABLE_NAME <> 'sccw_emp034_table')
ORDER BY TABLE_NAME

Cada tablas tiene x registros y lo que intento es que me muestre el nombre de la tabla + registros disponibles.

Gracias por la ayuda.
  #2 (permalink)  
Antiguo 20/07/2010, 08:12
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: Consulta SQL. AYUDA

Lo unico que se me ocurre es crear un procedimiento almacenado donde formaras dinamicamente el query que devolvera lo que necesitas. Quizas debas usar un while.
Alguien tiene una mejor idea?
Has buscado en google?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 20/07/2010, 09:40
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: Consulta SQL. AYUDA

Espero que esto sea lo que buscas

Código SQL:
Ver original
  1. /*----------------------------------------------------------------------
  2. -- Rutina para edicion 2005 y superior
  3. --
  4. */----------------------------------------------------------------------
  5. SET NOCOUNT ON;  
  6. DECLARE  
  7.     @fiMaxFilas INT,  
  8.     @fiRenglonActual INT,  
  9.     @fcComando VARCHAR(120)  
  10. SET @fiRenglonActual = 1  
  11.      
  12. DECLARE @AllTables TABLE  
  13. (  
  14.     fiIndice INT NOT NULL PRIMARY KEY,  
  15.     fcNombreTabla VARCHAR(100) NOT NULL  
  16. )  
  17.  
  18. INSERT INTO @AllTables  
  19. SELECT ROW_NUMBER() OVER(ORDER BY name) AS fiIndice, name  
  20. FROM sysobjects  
  21. WHERE TYPE = 'U'  
  22.  
  23. SELECT @fiMaxFilas = MAX(fiIndice) FROM @AllTables  
  24. WHILE (@fiRenglonActual <= @fiMaxFilas )  
  25. BEGIN  
  26.     SELECT @fcComando = 'sp_spaceused '+ fcNombreTabla FROM @AllTables WHERE fiIndice = @fiRenglonActual    
  27.     EXECUTE (@fcComando)  
  28.     SET @fiRenglonActual = @fiRenglonActual+1  
  29. END  
  30.  
  31.  
  32. /*----------------------------------------------------------------------
  33. -- Rutina para edicion 2000 y superior
  34. --
  35. */----------------------------------------------------------------------
  36. SET NOCOUNT ON;  
  37. DROP TABLE #Resultado
  38. DECLARE  
  39.     @fiMaxFilas INT,  
  40.     @fiRenglonActual INT,  
  41.     @fcComando VARCHAR(120)  
  42.      
  43.     SET @fiRenglonActual = 1  
  44.      
  45. DECLARE @AllTables TABLE  
  46. (  
  47.     fiIndice INT NOT NULL PRIMARY KEY IDENTITY(1,1),  
  48.     fcNombreTabla VARCHAR(100) NOT NULL  
  49. )  
  50.  
  51. INSERT INTO @AllTables  
  52. SELECT -- ROW_NUMBER() OVER(ORDER BY name) AS fiIndice,  
  53. name  
  54. FROM sysobjects  
  55. WHERE TYPE = 'U'  
  56.  
  57. SELECT @fiMaxFilas = MAX(fiIndice) FROM @AllTables  
  58. CREATE TABLE #Resultado (Name sysname, ROWS VARCHAR(50), Reserved VARCHAR(50), DATA VARCHAR(50), Index_size VARCHAR(50), Unused VARCHAR(50))
  59.  
  60. WHILE (@fiRenglonActual <= @fiMaxFilas )  
  61. BEGIN  
  62.     SELECT @fcComando = 'sp_spaceused '+ fcNombreTabla FROM @AllTables WHERE fiIndice = @fiRenglonActual
  63.     INSERT INTO #Resultado
  64.     EXECUTE (@fcComando)  
  65.     SET @fiRenglonActual = @fiRenglonActual+1  
  66. END  
  67.  
  68.  
  69. SELECT Name,
  70. ROWS,
  71. CAST(REPLACE(Reserved, 'KB', '') AS INT) AS Reserved,
  72. CAST(REPLACE(DATA, 'KB', '') AS INT) AS DATA,
  73. CAST(REPLACE(Index_size, 'KB', '') AS INT) AS Index_size,
  74. CAST(REPLACE(Unused, 'KB', '') AS INT) AS Unused
  75. FROM #Resultado
  76. ORDER BY 3 DESC
  #4 (permalink)  
Antiguo 20/07/2010, 15:23
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Consulta SQL. AYUDA

ya me perdi :(
  #5 (permalink)  
Antiguo 21/07/2010, 03:30
 
Fecha de Ingreso: julio-2010
Mensajes: 93
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta SQL. AYUDA

gracias iislas, pero mepodrias explicar más o menos como funciona, es que me he perdido un poco.

Gracias.
  #6 (permalink)  
Antiguo 21/07/2010, 09:43
 
Fecha de Ingreso: julio-2010
Mensajes: 93
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta SQL. AYUDA

He probado tu código pero no es lo que necesito. Haber si me explico más o menos lo que quiero hacer.

Yo tengo una Bd llamada cco_db, la cuál contiene X tablas con alrededor de 30000 registros cada una.
Lo que necesito es mostrar el nombre de la tabla y para cada una de ellas, el número de registros disponibles según un criterio que yo le marco.

Busco que me quede una cosa así:

NombreTabla RegDisponibles
----------------- -------------------
----------------- -------------------

SNJulio1 25689
SNJulio2 15478

Espero que hayais entendido lo que realmente necesito hacer.

Gracias por la ayuda, un saludo.
  #7 (permalink)  
Antiguo 21/07/2010, 12:27
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: Consulta SQL. AYUDA

No se dice, "que hayas entendido", se dice, "espero haberme explicado" y no, no te has explicado, "REGISTROS DISPONIBLES", ¿a que te refieres con esto?
  #8 (permalink)  
Antiguo 21/07/2010, 13:49
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Consulta SQL. AYUDA

creo que se refiere a un total de registros por cada tabla... me imagino que es un tope...
  #9 (permalink)  
Antiguo 22/07/2010, 05:17
 
Fecha de Ingreso: julio-2010
Mensajes: 93
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta SQL. AYUDA

Siento no haberme explicado. Intentaré explicarme lo mejor posible.

Obtengo el nombre de las tablas de mi base con esta consulta:

SELECT TABLE_NAME AS CAMPAÑAS
FROM INFORMATION_SCHEMA.TABLES
WHERE (TABLE_NAME LIKE 'sccw_%')
AND (TABLE_NAME <> 'sccw_scr_table1')
AND (TABLE_NAME <> 'sccw_prueba_table')
AND (TABLE_NAME <> 'sccw_emp034_table')
ORDER BY TABLE_NAME

Cada una de las tablas que me devuelve, contiene unos 30000 registros. Lo que necesito es que para cada una de las tablas, me calcule el total de registros disponibles (es decir, si tengo 30000 registros totales y le aplico mi criterio para filtrar, me devuelve un total de registros disponibles de 25000 para esa tabla).

Necesito hacer esto para cada una de las tablas que tengo y que lo que me muestre en pantalla sea el nombre de la tabla con sus registros disponibles correspondientes.

Espero haberme explicado más o menos correctamente en esta ocasión, un saludo y gracias.
  #10 (permalink)  
Antiguo 22/07/2010, 09: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: Consulta SQL. AYUDA

Eloy, nos estas confundiendo, a menos que tu difinieras un tope de registros, SQL SERVER, no lo maneja, te pregunte, que a QUE TE REFIERES CON REGISTROS DISPONIBLES.
  #11 (permalink)  
Antiguo 23/07/2010, 09:58
 
Fecha de Ingreso: julio-2010
Mensajes: 93
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta SQL. AYUDA

Lo siento, haber si logro explicarme correxctamente. Me refiero a que cada tabla tiene X registros y yo saco los que me quedan disponibles mediante esta consulta:

SELECT count(record_id)As total_disponibles
FROM sccw_SNjulio1_table
WHERE record_type = '2'
AND record_status = '1'
AND call_result = '28'

con esta consulta muestro los registros disponibles de una tabla. Ahora lo que necesito es que para cada tabla se me muestren los registros disponibles, es decir, que me aparezca el nombre de la tabla y al lado los registros disponibles para esa tabla.

Nombre Tabla || Registros Disponibles

Gracias, un saludo.
  #12 (permalink)  
Antiguo 23/07/2010, 10:21
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: Consulta SQL. AYUDA

¿como sabes que un REGISTRO ESTA DISPONIBLE?

Supongo, solo eso, que manejas un campo, que manejas como bandera, para saber mediante su status que esta o no disponible, ¿es eso?
  #13 (permalink)  
Antiguo 23/07/2010, 10:42
 
Fecha de Ingreso: julio-2010
Mensajes: 93
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta SQL. AYUDA

Haber, estas tablas contienen una serie de datos personales con tlfn, nombre, etc...

Que un registroe esté disponibles significa que aún no se le ha llamdao por tlfn, que es lo que saco con la consulta de antes.
  #14 (permalink)  
Antiguo 23/07/2010, 11:40
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: Consulta SQL. AYUDA

Comprendo, ahora si me queda claro, ¿Y todo lo quieres en una sola linea de T-SQL o se puede hacer un PROCEDIMIENTO ALMACENADO?
  #15 (permalink)  
Antiguo 23/07/2010, 16:25
 
Fecha de Ingreso: julio-2010
Mensajes: 93
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta SQL. AYUDA

Eso si me es indiferente porque lo que quiero es sacarlo en SQL para después pasarselo a un datatable de un grid en c#.

Gracias por vuestra ayuda. Un saludo.
  #16 (permalink)  
Antiguo 23/07/2010, 17:19
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: Consulta SQL. AYUDA

Solo adecua el SELECT a tus necesidades, cualquier duda, pregunta

Código SQL:
Ver original
  1. -- Declaro una variable tabla
  2. DECLARE @Tablas AS TABLE (Id INT IDENTITY(1,1), name VARCHAR(50), Records INT)
  3. DECLARE @Record INT
  4. DECLARE @IntTable sysname
  5. DECLARE @OutRecords INT
  6. DECLARE @SQLString NVARCHAR(500)
  7. DECLARE @ParmDefinition NVARCHAR(500)
  8. SET @Record = 1
  9. -- Inserto las tablas en custion
  10. INSERT INTO @Tablas (name)
  11. SELECT TABLE_NAME AS Tablas
  12. FROM INFORMATION_SCHEMA.TABLES
  13. -- Actualizo los registros de esas tablas
  14. WHILE @Record <= (SELECT COUNT(*) FROM @Tablas)
  15.  BEGIN
  16.     SELECT @IntTable = name FROM @Tablas WHERE Id = @Record
  17.     /* Build the SQL string once.*/
  18.     SET @SQLString = N'SELECT @Records = COUNT(*) FROM ' + @IntTable
  19.     SET @ParmDefinition = N'@Records int output'
  20.     EXECUTE sp_executesql @SQLString, @ParmDefinition,
  21.                           @Records = @OutRecords OUTPUT
  22.     -- Actualizo los registros de mi variable tabla
  23.     UPDATE @Tablas SET Records = @OutRecords WHERE Id = @Record
  24.     SET @Record = @Record + 1
  25.  END
  26.  -- Muestro lo que ha quedado al final
  27.  SELECT * FROM @Tablas
  #17 (permalink)  
Antiguo 24/07/2010, 03:37
 
Fecha de Ingreso: julio-2010
Mensajes: 93
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta SQL. AYUDA

Gracias iislas pero me lo podrías explicar más o menos, es que me pierdo en el código. Gracias.
  #18 (permalink)  
Antiguo 26/07/2010, 05:36
 
Fecha de Ingreso: julio-2010
Mensajes: 93
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta SQL. AYUDA

No entiendo la última parte de la consulta. Te agradecería mucho que me orientases un poco sobre lo que haces con ella. Un saludo y gracias.
  #19 (permalink)  
Antiguo 26/07/2010, 10:03
 
Fecha de Ingreso: julio-2010
Mensajes: 93
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Consulta SQL. AYUDA

Gracias iislas por tu código. Con tu consulta me muestra el nombre y los registros totales de cada tabla, pero donde le añado el filtro para que solo me muestre los disponibles.

Un saludo.
  #20 (permalink)  
Antiguo 26/07/2010, 11:06
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: Consulta SQL. AYUDA

amigo, debe ser en el WHERE.....y dime exactamente que es lo que no se comprende

Etiquetas: sql
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 10:55.