怎么都动态查询数据库中所有表的记录数

时间:2022-07-15 13:50:50
如果我表中记录增加了,查询结果就会跟着改变,怎么改啊


DECLARE @table NVARCHAR(300) 
DECLARE @name NVARCHAR(300) 
DECLARE cursor_employee CURSOR LOCAL
FOR
    SELECT  name
    FROM    sys.objects
    WHERE   type = 'U'
DECLARE @sqlsentence NVARCHAR(1000)
DECLARE @t1 INT
OPEN  cursor_employee   
FETCH NEXT FROM cursor_employee  INTO @table
WHILE @@FETCH_STATUS = 0
    BEGIN       
        SET @name = REPLACE(@table, 'xml_', '')  
        SET @sqlsentence = 'select @t1=COUNT(*) from ' + @table + ';'
        EXEC sp_executesql @sqlsentence, N'@t1 int out', @t1 OUT              
        SELECT  @table ,
                @t1
        FETCH NEXT FROM cursor_employee  INTO @table
    END  
CLOSE cursor_employee   
DEALLOCATE cursor_employee
end

16 个解决方案

#1


给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

#2


引用 1 楼 sinat_28984567 的回复:
给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

#3


引用 2 楼 caopeihuaaini 的回复:
Quote: 引用 1 楼 sinat_28984567 的回复:

给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

这个统计需要是实时的吗?如果不需要写个作业每天执行统计一次也行。触发器就是实时的,楼主可以先百度看一下,挺简单的

#4


引用 3 楼 sinat_28984567 的回复:
Quote: 引用 2 楼 caopeihuaaini 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

这个统计需要是实时的吗?如果不需要写个作业每天执行统计一次也行。触发器就是实时的,楼主可以先百度看一下,挺简单的

对啊,实时的,那边改了,这边结果就得改,我们经理说要写个动态游标sql

#5


直接用系统视图
sysindexes/sys.partitions

e.g.
SELECT  b.name ,
        a.rows
FROM    sysindexes AS a
        INNER JOIN sys.tables AS b ON b.object_id = a.id
WHERE   indid IN ( 0, 1 );

#6


引用 4 楼 caopeihuaaini 的回复:
Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 caopeihuaaini 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

这个统计需要是实时的吗?如果不需要写个作业每天执行统计一次也行。触发器就是实时的,楼主可以先百度看一下,挺简单的

对啊,实时的,那边改了,这边结果就得改,我们经理说要写个动态游标sql

表多吗?不多可以用触发器实现

#7


引用 6 楼 sinat_28984567 的回复:
Quote: 引用 4 楼 caopeihuaaini 的回复:

Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 caopeihuaaini 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

这个统计需要是实时的吗?如果不需要写个作业每天执行统计一次也行。触发器就是实时的,楼主可以先百度看一下,挺简单的

对啊,实时的,那边改了,这边结果就得改,我们经理说要写个动态游标sql

表多吗?不多可以用触发器实现



那么我先试试吧,不行,我再问你啊

#8


引用 5 楼 roy_88 的回复:
直接用系统视图
sysindexes/sys.partitions

e.g.
SELECT  b.name ,
        a.rows
FROM    sysindexes AS a
        INNER JOIN sys.tables AS b ON b.object_id = a.id
WHERE   indid IN ( 0, 1 );


可是现在查询数据条数能查,关键怎么动态把这记录插入到一张表里啊

#9


引用 6 楼 sinat_28984567 的回复:
Quote: 引用 4 楼 caopeihuaaini 的回复:

Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 caopeihuaaini 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

这个统计需要是实时的吗?如果不需要写个作业每天执行统计一次也行。触发器就是实时的,楼主可以先百度看一下,挺简单的

对啊,实时的,那边改了,这边结果就得改,我们经理说要写个动态游标sql

表多吗?不多可以用触发器实现


表挺多的,有点难搞啊,触发器,我看都是单张表的啊

#10


引用 8 楼 caopeihuaaini 的回复:
可是现在查询数据条数能查,关键怎么动态把这记录插入到一张表里啊

简单实现,不实时更新时这样用
异步同步表记录时用以上语句在JOB里调度更新就行了,比如设置每分钟更新一下

要求实时更新表记录时,在触发器调用上面语句更新表记录

不需要动态低效率,原则直接用上面方法取表记录更新

#11


引用 10 楼 roy_88 的回复:
Quote: 引用 8 楼 caopeihuaaini 的回复:


可是现在查询数据条数能查,关键怎么动态把这记录插入到一张表里啊

简单实现,不实时更新时这样用
异步同步表记录时用以上语句在JOB里调度更新就行了,比如设置每分钟更新一下

要求实时更新表记录时,在触发器调用上面语句更新表记录

不需要动态低效率,原则直接用上面方法取表记录更新

好高端,听不懂 怎么都动态查询数据库中所有表的记录数

#12


引用 9 楼 caopeihuaaini 的回复:
表挺多的,有点难搞啊,触发器,我看都是单张表的啊


不用触发器要不就写个方法或者存储过程,每次程序改变数据库的时候执行一下存储过程。

#13


引用 12 楼 sinat_28984567 的回复:
Quote: 引用 9 楼 caopeihuaaini 的回复:

表挺多的,有点难搞啊,触发器,我看都是单张表的啊


不用触发器要不就写个方法或者存储过程,每次程序改变数据库的时候执行一下存储过程。


之前写的为什么不是动态啊,@t1参数不就是用来接收条数么,我们把SET @sqlsentence=后面的查询语句改了行不行啊
SET @sqlsentence = 'select @t1=COUNT(*) from ' + @table + ';'

#14


引用 11 楼 caopeihuaaini 的回复:
好高端,听不懂 怎么都动态查询数据库中所有表的记录数


这系统视图记录表名和对应的当前表记录,你自己执行一下看效果

你用的方法都会用到表扫描和索引扫描(会取最小的索引),这样效率低方法不可取

#15


引用 13 楼 caopeihuaaini 的回复:
Quote: 引用 12 楼 sinat_28984567 的回复:

Quote: 引用 9 楼 caopeihuaaini 的回复:

表挺多的,有点难搞啊,触发器,我看都是单张表的啊


不用触发器要不就写个方法或者存储过程,每次程序改变数据库的时候执行一下存储过程。


之前写的为什么不是动态啊,@t1参数不就是用来接收条数么,我们把SET @sqlsentence=后面的查询语句改了行不行啊
SET @sqlsentence = 'select @t1=COUNT(*) from ' + @table + ';'

额,不一定要用动态的,可以用大版写的那个,你们经理为什么要让你们非得用动态的呢?

#16


引用 15 楼 sinat_28984567 的回复:
Quote: 引用 13 楼 caopeihuaaini 的回复:

Quote: 引用 12 楼 sinat_28984567 的回复:

Quote: 引用 9 楼 caopeihuaaini 的回复:

表挺多的,有点难搞啊,触发器,我看都是单张表的啊


不用触发器要不就写个方法或者存储过程,每次程序改变数据库的时候执行一下存储过程。


之前写的为什么不是动态啊,@t1参数不就是用来接收条数么,我们把SET @sqlsentence=后面的查询语句改了行不行啊
SET @sqlsentence = 'select @t1=COUNT(*) from ' + @table + ';'

额,不一定要用动态的,可以用大版写的那个,你们经理为什么要让你们非得用动态的呢?

没事了,我调用下存储过程就行了

#1


给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

#2


引用 1 楼 sinat_28984567 的回复:
给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

#3


引用 2 楼 caopeihuaaini 的回复:
Quote: 引用 1 楼 sinat_28984567 的回复:

给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

这个统计需要是实时的吗?如果不需要写个作业每天执行统计一次也行。触发器就是实时的,楼主可以先百度看一下,挺简单的

#4


引用 3 楼 sinat_28984567 的回复:
Quote: 引用 2 楼 caopeihuaaini 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

这个统计需要是实时的吗?如果不需要写个作业每天执行统计一次也行。触发器就是实时的,楼主可以先百度看一下,挺简单的

对啊,实时的,那边改了,这边结果就得改,我们经理说要写个动态游标sql

#5


直接用系统视图
sysindexes/sys.partitions

e.g.
SELECT  b.name ,
        a.rows
FROM    sysindexes AS a
        INNER JOIN sys.tables AS b ON b.object_id = a.id
WHERE   indid IN ( 0, 1 );

#6


引用 4 楼 caopeihuaaini 的回复:
Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 caopeihuaaini 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

这个统计需要是实时的吗?如果不需要写个作业每天执行统计一次也行。触发器就是实时的,楼主可以先百度看一下,挺简单的

对啊,实时的,那边改了,这边结果就得改,我们经理说要写个动态游标sql

表多吗?不多可以用触发器实现

#7


引用 6 楼 sinat_28984567 的回复:
Quote: 引用 4 楼 caopeihuaaini 的回复:

Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 caopeihuaaini 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

这个统计需要是实时的吗?如果不需要写个作业每天执行统计一次也行。触发器就是实时的,楼主可以先百度看一下,挺简单的

对啊,实时的,那边改了,这边结果就得改,我们经理说要写个动态游标sql

表多吗?不多可以用触发器实现



那么我先试试吧,不行,我再问你啊

#8


引用 5 楼 roy_88 的回复:
直接用系统视图
sysindexes/sys.partitions

e.g.
SELECT  b.name ,
        a.rows
FROM    sysindexes AS a
        INNER JOIN sys.tables AS b ON b.object_id = a.id
WHERE   indid IN ( 0, 1 );


可是现在查询数据条数能查,关键怎么动态把这记录插入到一张表里啊

#9


引用 6 楼 sinat_28984567 的回复:
Quote: 引用 4 楼 caopeihuaaini 的回复:

Quote: 引用 3 楼 sinat_28984567 的回复:

Quote: 引用 2 楼 caopeihuaaini 的回复:

Quote: 引用 1 楼 sinat_28984567 的回复:

给表加触发器,每次insert数据,就update记录表中对应的表的数据条数

大神你又来了,上面那个还是你教我写的,我新手啊,触发器没用过,不太会 怎么都动态查询数据库中所有表的记录数

这个统计需要是实时的吗?如果不需要写个作业每天执行统计一次也行。触发器就是实时的,楼主可以先百度看一下,挺简单的

对啊,实时的,那边改了,这边结果就得改,我们经理说要写个动态游标sql

表多吗?不多可以用触发器实现


表挺多的,有点难搞啊,触发器,我看都是单张表的啊

#10


引用 8 楼 caopeihuaaini 的回复:
可是现在查询数据条数能查,关键怎么动态把这记录插入到一张表里啊

简单实现,不实时更新时这样用
异步同步表记录时用以上语句在JOB里调度更新就行了,比如设置每分钟更新一下

要求实时更新表记录时,在触发器调用上面语句更新表记录

不需要动态低效率,原则直接用上面方法取表记录更新

#11


引用 10 楼 roy_88 的回复:
Quote: 引用 8 楼 caopeihuaaini 的回复:


可是现在查询数据条数能查,关键怎么动态把这记录插入到一张表里啊

简单实现,不实时更新时这样用
异步同步表记录时用以上语句在JOB里调度更新就行了,比如设置每分钟更新一下

要求实时更新表记录时,在触发器调用上面语句更新表记录

不需要动态低效率,原则直接用上面方法取表记录更新

好高端,听不懂 怎么都动态查询数据库中所有表的记录数

#12


引用 9 楼 caopeihuaaini 的回复:
表挺多的,有点难搞啊,触发器,我看都是单张表的啊


不用触发器要不就写个方法或者存储过程,每次程序改变数据库的时候执行一下存储过程。

#13


引用 12 楼 sinat_28984567 的回复:
Quote: 引用 9 楼 caopeihuaaini 的回复:

表挺多的,有点难搞啊,触发器,我看都是单张表的啊


不用触发器要不就写个方法或者存储过程,每次程序改变数据库的时候执行一下存储过程。


之前写的为什么不是动态啊,@t1参数不就是用来接收条数么,我们把SET @sqlsentence=后面的查询语句改了行不行啊
SET @sqlsentence = 'select @t1=COUNT(*) from ' + @table + ';'

#14


引用 11 楼 caopeihuaaini 的回复:
好高端,听不懂 怎么都动态查询数据库中所有表的记录数


这系统视图记录表名和对应的当前表记录,你自己执行一下看效果

你用的方法都会用到表扫描和索引扫描(会取最小的索引),这样效率低方法不可取

#15


引用 13 楼 caopeihuaaini 的回复:
Quote: 引用 12 楼 sinat_28984567 的回复:

Quote: 引用 9 楼 caopeihuaaini 的回复:

表挺多的,有点难搞啊,触发器,我看都是单张表的啊


不用触发器要不就写个方法或者存储过程,每次程序改变数据库的时候执行一下存储过程。


之前写的为什么不是动态啊,@t1参数不就是用来接收条数么,我们把SET @sqlsentence=后面的查询语句改了行不行啊
SET @sqlsentence = 'select @t1=COUNT(*) from ' + @table + ';'

额,不一定要用动态的,可以用大版写的那个,你们经理为什么要让你们非得用动态的呢?

#16


引用 15 楼 sinat_28984567 的回复:
Quote: 引用 13 楼 caopeihuaaini 的回复:

Quote: 引用 12 楼 sinat_28984567 的回复:

Quote: 引用 9 楼 caopeihuaaini 的回复:

表挺多的,有点难搞啊,触发器,我看都是单张表的啊


不用触发器要不就写个方法或者存储过程,每次程序改变数据库的时候执行一下存储过程。


之前写的为什么不是动态啊,@t1参数不就是用来接收条数么,我们把SET @sqlsentence=后面的查询语句改了行不行啊
SET @sqlsentence = 'select @t1=COUNT(*) from ' + @table + ';'

额,不一定要用动态的,可以用大版写的那个,你们经理为什么要让你们非得用动态的呢?

没事了,我调用下存储过程就行了