Cantidad de Registros por tabla y campo

17/05/2004 - 20:18 por Marcelo Molina | Informe spam
Buenas, estoy tratando de generar una consulta que me
permita conocer la densidad de datos que tengo en una BD.
Para esto armé 1 cursor que recorres los objetos tabla y a
su vez un cursor para recorrer dentro de las tablas los
campos.
El problema se me presenta cuando intento asignar a una
variable la cantidad de registros. Me da un error donde no
reconoce la variable @tabla.
Para ver si estaba bien el contenido de la variable
@tabla, concantené la instrucción en una variable de
texto, luego la imprimi y me muestra correctamente la
sentencia con el nombre de la tabla bien.
Les una parte del código

Declare cTablas Cursor For
Select TMP_TABLA
FROM #TMP_RESOTABLES --en esta tabla ya cargue los
nombres de las tablas.
Open cTablas

Fetch Next from cTablas Into @tabla
While (@@Fetch_status <>-1)
select @Cant=count(*) from @Tabla -- aca me da error
con @tabla

set @sql1='select count(*) from '+ @Tabla
Luego realizo la búsqueda por campos, pero primero me
gustaría resolver esto.
Mi intención es que la variable @Cant guarde la cantidad
de registros de la tabla que estoy leyendo en ese momento,
para luego insertarla en otra tabla.

SI ALGUIEN CONOCE OTRA MANERA MAS FACIL DE REALIZAR UN
ANALISIS DE CANTIDAD DE REGISTROS POR TABLA Y LUEGO POR
CAMPO SE LO VOY A AGRADECER.

MUCHAS GRACIAS


MARCELO

Preguntas similare

Leer las respuestas

#1 Maxi
17/05/2004 - 22:52 | Informe spam
Hola, y porque haces un cursor? no seria mejor hacer un Count() por ej?


Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Marcelo Molina" escribió en el mensaje
news:e30d01c43c3b$4a2ff350$
Buenas, estoy tratando de generar una consulta que me
permita conocer la densidad de datos que tengo en una BD.
Para esto armé 1 cursor que recorres los objetos tabla y a
su vez un cursor para recorrer dentro de las tablas los
campos.
El problema se me presenta cuando intento asignar a una
variable la cantidad de registros. Me da un error donde no
reconoce la variable @tabla.
Para ver si estaba bien el contenido de la variable
@tabla, concantené la instrucción en una variable de
texto, luego la imprimi y me muestra correctamente la
sentencia con el nombre de la tabla bien.
Les una parte del código

Declare cTablas Cursor For
Select TMP_TABLA
FROM #TMP_RESOTABLES --en esta tabla ya cargue los
nombres de las tablas.
Open cTablas

Fetch Next from cTablas Into @tabla
While (@@Fetch_status <>-1)
select @Cant=count(*) from @Tabla -- aca me da error
con @tabla

set @sql1='select count(*) from '+ @Tabla
Luego realizo la búsqueda por campos, pero primero me
gustaría resolver esto.
Mi intención es que la variable @Cant guarde la cantidad
de registros de la tabla que estoy leyendo en ese momento,
para luego insertarla en otra tabla.

SI ALGUIEN CONOCE OTRA MANERA MAS FACIL DE REALIZAR UN
ANALISIS DE CANTIDAD DE REGISTROS POR TABLA Y LUEGO POR
CAMPO SE LO VOY A AGRADECER.

MUCHAS GRACIAS


MARCELO



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date: 03/05/2004
Respuesta Responder a este mensaje
#2 ulises
18/05/2004 - 01:22 | Informe spam
Maxi, eso es lo que está tratando de hacer pero por cada
tabla, en todo caso también podría usar lo siguiente :

USE pubs
CREATE TABLE #tempo (nombre varchar(20), cantidad int)
EXEC sp_MSforeachtable 'INSERT INTO #tempo SELECT ''?'',
COUNT(*) FROM ?'
SELECT nombre, cantidad FROM #tempo ORDER BY nombre

resultado :

nombre cantidad
[dbo].[authors] 23
[dbo].[discounts] 3
[dbo].[employee] 43
[dbo].[espacio] 1
[dbo].[jobs] 14
[dbo].[pub_info] 8
[dbo].[publishers] 8
[dbo].[roysched] 86
[dbo].[sales] 21
[dbo].[stores] 6
[dbo].[tempocadena] 8
[dbo].[titleauthor] 25
[dbo].[titles] 18

(13 row(s) affected)

Saludos,
Ulises

Hola, y porque haces un cursor? no seria mejor hacer un


Count() por ej?


Salu2
-


-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
-


-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Marcelo Molina" escribió en el


mensaje
news:e30d01c43c3b$4a2ff350$
Buenas, estoy tratando de generar una consulta que me
permita conocer la densidad de datos que tengo en una BD.
Para esto armé 1 cursor que recorres los objetos tabla y a
su vez un cursor para recorrer dentro de las tablas los
campos.
El problema se me presenta cuando intento asignar a una
variable la cantidad de registros. Me da un error donde no
reconoce la variable @tabla.
Para ver si estaba bien el contenido de la variable
@tabla, concantené la instrucción en una variable de
texto, luego la imprimi y me muestra correctamente la
sentencia con el nombre de la tabla bien.
Les una parte del código

Declare cTablas Cursor For
Select TMP_TABLA
FROM #TMP_RESOTABLES --en esta tabla ya cargue los
nombres de las tablas.
Open cTablas

Fetch Next from cTablas Into @tabla
While (@@Fetch_status <>-1)
select @Cant=count(*) from @Tabla -- aca me da error
con @tabla

set @sql1='select count(*) from '+ @Tabla
Luego realizo la búsqueda por campos, pero primero me
gustaría resolver esto.
Mi intención es que la variable @Cant guarde la cantidad
de registros de la tabla que estoy leyendo en ese momento,
para luego insertarla en otra tabla.

SI ALGUIEN CONOCE OTRA MANERA MAS FACIL DE REALIZAR UN
ANALISIS DE CANTIDAD DE REGISTROS POR TABLA Y LUEGO POR
CAMPO SE LO VOY A AGRADECER.

MUCHAS GRACIAS


MARCELO



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date:


03/05/2004


.

Respuesta Responder a este mensaje
#3 Marcelo
18/05/2004 - 13:56 | Informe spam
Ulises, muchas gracias, lo que pasaste anduvo bárbaro.
Ahora veo como puedo armar algo para la densidad de datos
en los campos de cada tabla.

Muchas Gracias!!!!
Maxi, eso es lo que está tratando de hacer pero por cada
tabla, en todo caso también podría usar lo siguiente :

USE pubs
CREATE TABLE #tempo (nombre varchar(20), cantidad int)
EXEC sp_MSforeachtable 'INSERT INTO #tempo SELECT ''?'',
COUNT(*) FROM ?'
SELECT nombre, cantidad FROM #tempo ORDER BY nombre

resultado :

nombre cantidad
[dbo].[authors] 23
[dbo].[discounts] 3
[dbo].[employee] 43
[dbo].[espacio] 1
[dbo].[jobs] 14
[dbo].[pub_info] 8
[dbo].[publishers] 8
[dbo].[roysched] 86
[dbo].[sales] 21
[dbo].[stores] 6
[dbo].[tempocadena] 8
[dbo].[titleauthor] 25
[dbo].[titles] 18

(13 row(s) affected)

Saludos,
Ulises

Hola, y porque haces un cursor? no seria mejor hacer un


Count() por ej?


Salu2





-
-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET





-
-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Marcelo Molina" escribió en el


mensaje
news:e30d01c43c3b$4a2ff350$
Buenas, estoy tratando de generar una consulta que me
permita conocer la densidad de datos que tengo en una BD.
Para esto armé 1 cursor que recorres los objetos tabla y




a
su vez un cursor para recorrer dentro de las tablas los
campos.
El problema se me presenta cuando intento asignar a una
variable la cantidad de registros. Me da un error donde




no
reconoce la variable @tabla.
Para ver si estaba bien el contenido de la variable
@tabla, concantené la instrucción en una variable de
texto, luego la imprimi y me muestra correctamente la
sentencia con el nombre de la tabla bien.
Les una parte del código

Declare cTablas Cursor For
Select TMP_TABLA
FROM #TMP_RESOTABLES --en esta tabla ya cargue los
nombres de las tablas.
Open cTablas

Fetch Next from cTablas Into @tabla
While (@@Fetch_status <>-1)
select @Cant=count(*) from @Tabla -- aca me da error
con @tabla

set @sql1='select count(*) from '+ @Tabla
Luego realizo la búsqueda por campos, pero primero me
gustaría resolver esto.
Mi intención es que la variable @Cant guarde la cantidad
de registros de la tabla que estoy leyendo en ese




momento,
para luego insertarla en otra tabla.

SI ALGUIEN CONOCE OTRA MANERA MAS FACIL DE REALIZAR UN
ANALISIS DE CANTIDAD DE REGISTROS POR TABLA Y LUEGO POR
CAMPO SE LO VOY A AGRADECER.

MUCHAS GRACIAS


MARCELO



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date:


03/05/2004


.



.

Respuesta Responder a este mensaje
#4 Manuel Etcheto
18/05/2004 - 19:58 | Informe spam
Hola
También podría tomar la info de sysindexes en lugar de un
cursor o foreach y ponerla en una vista o en una UDF table
en lugar de una temporal:

CREATE VIEW dbo.FilasPorTabla
AS
SELECT O.name, SUM(I.rows) as filas
FROM Sysobjects O JOIN Sysindexes I
ON O.id = I.id
WHERE O.xtype='U' AND I.indid < 2
GROUP BY O.name
GO

SELECT * FROM dbo.FilasPorTabla

Salu2
Manuel



Maxi, eso es lo que está tratando de hacer pero por cada
tabla, en todo caso también podría usar lo siguiente :

USE pubs
CREATE TABLE #tempo (nombre varchar(20), cantidad int)
EXEC sp_MSforeachtable 'INSERT INTO #tempo SELECT ''?'',
COUNT(*) FROM ?'
SELECT nombre, cantidad FROM #tempo ORDER BY nombre

resultado :

nombre cantidad
[dbo].[authors] 23
[dbo].[discounts] 3
[dbo].[employee] 43
[dbo].[espacio] 1
[dbo].[jobs] 14
[dbo].[pub_info] 8
[dbo].[publishers] 8
[dbo].[roysched] 86
[dbo].[sales] 21
[dbo].[stores] 6
[dbo].[tempocadena] 8
[dbo].[titleauthor] 25
[dbo].[titles] 18

(13 row(s) affected)

Saludos,
Ulises

Hola, y porque haces un cursor? no seria mejor hacer un


Count() por ej?


Salu2





-
-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET





-
-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Marcelo Molina" escribió en el


mensaje
news:e30d01c43c3b$4a2ff350$
Buenas, estoy tratando de generar una consulta que me
permita conocer la densidad de datos que tengo en una BD.
Para esto armé 1 cursor que recorres los objetos tabla y




a
su vez un cursor para recorrer dentro de las tablas los
campos.
El problema se me presenta cuando intento asignar a una
variable la cantidad de registros. Me da un error donde




no
reconoce la variable @tabla.
Para ver si estaba bien el contenido de la variable
@tabla, concantené la instrucción en una variable de
texto, luego la imprimi y me muestra correctamente la
sentencia con el nombre de la tabla bien.
Les una parte del código

Declare cTablas Cursor For
Select TMP_TABLA
FROM #TMP_RESOTABLES --en esta tabla ya cargue los
nombres de las tablas.
Open cTablas

Fetch Next from cTablas Into @tabla
While (@@Fetch_status <>-1)
select @Cant=count(*) from @Tabla -- aca me da error
con @tabla

set @sql1='select count(*) from '+ @Tabla
Luego realizo la búsqueda por campos, pero primero me
gustaría resolver esto.
Mi intención es que la variable @Cant guarde la cantidad
de registros de la tabla que estoy leyendo en ese




momento,
para luego insertarla en otra tabla.

SI ALGUIEN CONOCE OTRA MANERA MAS FACIL DE REALIZAR UN
ANALISIS DE CANTIDAD DE REGISTROS POR TABLA Y LUEGO POR
CAMPO SE LO VOY A AGRADECER.

MUCHAS GRACIAS


MARCELO



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date:


03/05/2004


.



.

Respuesta Responder a este mensaje
#5 Miguel Egea
18/05/2004 - 23:03 | Informe spam
de todas formas ojo con esta tabla que no tiene por que estár actualizada,
En cualquier caso para ver densidades y distribuciones quizá sea más
completa la información que da DBCC SHOW_STATISTICS ( table , target ),


-

Miguel Egea Gómez
Webmaster de PortalSQL

(lo de online sobra)

Microsoft SqlServer M.V.P.

"Manuel Etcheto" escribió en el
mensaje news:ec5b01c43d01$c4a97cc0$
Hola
También podría tomar la info de sysindexes en lugar de un
cursor o foreach y ponerla en una vista o en una UDF table
en lugar de una temporal:

CREATE VIEW dbo.FilasPorTabla
AS
SELECT O.name, SUM(I.rows) as filas
FROM Sysobjects O JOIN Sysindexes I
ON O.id = I.id
WHERE O.xtype='U' AND I.indid < 2
GROUP BY O.name
GO

SELECT * FROM dbo.FilasPorTabla

Salu2
Manuel



Maxi, eso es lo que está tratando de hacer pero por cada
tabla, en todo caso también podría usar lo siguiente :

USE pubs
CREATE TABLE #tempo (nombre varchar(20), cantidad int)
EXEC sp_MSforeachtable 'INSERT INTO #tempo SELECT ''?'',
COUNT(*) FROM ?'
SELECT nombre, cantidad FROM #tempo ORDER BY nombre

resultado :

nombre cantidad
[dbo].[authors] 23
[dbo].[discounts] 3
[dbo].[employee] 43
[dbo].[espacio] 1
[dbo].[jobs] 14
[dbo].[pub_info] 8
[dbo].[publishers] 8
[dbo].[roysched] 86
[dbo].[sales] 21
[dbo].[stores] 6
[dbo].[tempocadena] 8
[dbo].[titleauthor] 25
[dbo].[titles] 18

(13 row(s) affected)

Saludos,
Ulises

Hola, y porque haces un cursor? no seria mejor hacer un


Count() por ej?


Salu2





-
-
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET





-
-
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Marcelo Molina" escribió en el


mensaje
news:e30d01c43c3b$4a2ff350$
Buenas, estoy tratando de generar una consulta que me
permita conocer la densidad de datos que tengo en una BD.
Para esto armé 1 cursor que recorres los objetos tabla y




a
su vez un cursor para recorrer dentro de las tablas los
campos.
El problema se me presenta cuando intento asignar a una
variable la cantidad de registros. Me da un error donde




no
reconoce la variable @tabla.
Para ver si estaba bien el contenido de la variable
@tabla, concantené la instrucción en una variable de
texto, luego la imprimi y me muestra correctamente la
sentencia con el nombre de la tabla bien.
Les una parte del código

Declare cTablas Cursor For
Select TMP_TABLA
FROM #TMP_RESOTABLES --en esta tabla ya cargue los
nombres de las tablas.
Open cTablas

Fetch Next from cTablas Into @tabla
While (@@Fetch_status <>-1)
select @Cant=count(*) from @Tabla -- aca me da error
con @tabla

set @sql1='select count(*) from '+ @Tabla
Luego realizo la búsqueda por campos, pero primero me
gustaría resolver esto.
Mi intención es que la variable @Cant guarde la cantidad
de registros de la tabla que estoy leyendo en ese




momento,
para luego insertarla en otra tabla.

SI ALGUIEN CONOCE OTRA MANERA MAS FACIL DE REALIZAR UN
ANALISIS DE CANTIDAD DE REGISTROS POR TABLA Y LUEGO POR
CAMPO SE LO VOY A AGRADECER.

MUCHAS GRACIAS


MARCELO



Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system




(http://www.grisoft.com).
Version: 6.0.676 / Virus Database: 438 - Release Date:


03/05/2004


.



.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida