SQL Query根据列名获取表名和行数“

时间:2010-09-21 17:14:58

标签: sql sql-server tsql

我已经声明了一个Cursor来获取表名,而不是根据列名获取那些表中的列。请找到下面的查询表名不插入。请建议。

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 

3 个答案:

答案 0 :(得分:2)

您可以在一个INSERT中插入表名和行数:

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

你所拥有的内容在表名和计数之间没有任何联系,所以你不可能错过一个表,但是NoOfRows实际上与记录中的表名相关联是值得怀疑的。 p>

答案 1 :(得分:1)

这是获取所需表格的更好方法(不会出现目录和架构重叠的问题)

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

答案 2 :(得分:0)

您正在临时表中进行两次插入,一次用于表名(没有计数),另一次用于没有表名的计数。

请参阅OMG Ponies以获取SQL以替换您的SQL并仅使用表名删除插入