2010-09-21 7 views
2

J'ai déclaré un curseur pour obtenir les noms de table et non de colonnes dans ces tables basées sur les noms de colonnes.Veuillez trouver le nom de la table de requête ci-dessous .please suggèrentRequête SQL pour obtenir le nom de la table et le nombre de lignes basé sur le nom de la colonne "

Create table #t 
(
tabname varchar(500), 
NoOfRows bigint, 
) 

Declare @Namee Varchar(500) 
Declare @GetName Cursor 
Set  @Getname = Cursor for 
Select table_name from information_Schema.columns 
where column_name='isactive'Open @Getname 
Fetch Next From @Getname into @Namee 
While @@Fetch_Status=0 
Begin 
--Print @Namee 
insert into #t(tabname) SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME =' + @Namee + ' 
exec ('insert into #t(NoOfRows) Select count(*) from ' + @Namee + ' where isactive=0') 
Fetch Next From @Getname into @Namee 
End 
Close @GetName 
Deallocate @GetName 
select * from #t 

Répondre

2

vous pouvez insérer le nom de la table et le nombre de lignes dans une seule INSERT.

EXEC('INSERT INTO #t 
     (tabname, NoOfRows) 
     SELECT '''+ @Namee +''', COUNT(*) 
     FROM ' + @Namee + ' 
     WHERE isactive = 0') 

Qu'est-ce que vous avez fait aucun lien entre le nom de la table et le nombre, il est donc peu probable il vous manque une table mais il est douteux que le NoOfRows ait été associé à le nom de la table dans l'enregistrement.

+0

Merci OMG cela fonctionne. – Simhadri

0

Vous faites deux insertions dans votre table temporaire, une pour le nom de la table (sans compter) et une pour le nombre sans nom de table.

Voir OMG Poneys pour le SQL pour remplacer le vôtre avec et enlever l'insert avec juste un nom de table

1

Voici une meilleure façon d'obtenir les tables que vous voulez (ne sera pas avoir des problèmes avec le catalogue et le chevauchement de schéma)

declare @colname varchar(max) 
set @colname = 'isactive' 

SELECT table_name from information_schema.tables t 
    join information_schema.columns c on t.table_catalog = c.table_catalog and  
             t.table_schema = c.table_schema and 
             t.table_name = c.table_name and 
             column_name = @colname 
Questions connexes