我已经声明了一个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
答案 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并仅使用表名删除插入