我在SQL Server 2008 R2中有数据库Test1
。在实时服务器上,我从那里获取备份并在我们的本地计算机上将其恢复为Test2
并添加了一些表格和程序。
如果我们将Test2
恢复到实时服务器上,那么任何可以获取表名称和过程名称的查询只能在测试2中而不是在测试1中,或者SQL Server将其视为完全不同的数据库? / p>
如果我只想知道Test1
和Test2
数据库的差异数量,那么查询是什么
答案 0 :(得分:72)
这将为您提供表和存储过程的计数。
SELECT
CASE TYPE
WHEN 'U'
THEN 'User Defined Tables'
WHEN 'S'
THEN 'System Tables'
WHEN 'IT'
THEN 'Internal Tables'
WHEN 'P'
THEN 'Stored Procedures'
WHEN 'PC'
THEN 'CLR Stored Procedures'
WHEN 'X'
THEN 'Extended Stored Procedures'
END,
COUNT(*)
FROM SYS.OBJECTS
WHERE TYPE IN ('U', 'P', 'PC', 'S', 'IT', 'X')
GROUP BY TYPE
您可以在sys.objects
中找到数据库中所有类型的对象。您必须在每个数据库上运行此查询以查看对象的数量。
您可以找到有关sys.objects
here中存储内容的所有信息。
答案 1 :(得分:14)
您可以使用这两个查询:
select count(*) as TablesCount from sys.tables
select count(*) as ProceduresCount from sys.procedures
答案 2 :(得分:5)
我经常使用我在this blog
上找到的脚本USE [MyDatabase]
GO
SELECT 'Count' = COUNT(*), 'Type' = CASE type
WHEN 'C' THEN 'CHECK constraints'
WHEN 'D' THEN 'Default or DEFAULT constraints'
WHEN 'F' THEN 'FOREIGN KEY constraints'
WHEN 'FN' THEN 'Scalar functions'
WHEN 'IF' THEN 'Inlined table-functions'
WHEN 'K' THEN 'PRIMARY KEY or UNIQUE constraints'
WHEN 'L' THEN 'Logs'
WHEN 'P' THEN 'Stored procedures'
WHEN 'R' THEN 'Rules'
WHEN 'RF' THEN 'Replication filter stored procedures'
WHEN 'S' THEN 'System tables'
WHEN 'TF' THEN 'Table functions'
WHEN 'TR' THEN 'Triggers'
WHEN 'U' THEN 'User tables'
WHEN 'V' THEN 'Views'
WHEN 'X' THEN 'Extended stored procedures'
END
FROM sys.objects
GROUP BY type
ORDER BY type
GO
您可以根据sys.objects
的相关信息对其进行修改或者来自此引用Object Catalog Views的对象,因为您已经得到了前面答案中表格和程序的答案,例如
SELECT count(*) AS MyTables FROM sys.tables
SELECT count(*) AS MyProcedures FROM sys.procedures
SELECT count(*) AS MyTriggers FROM sys.triggers
SELECT count(*) AS MyViews FROM sys.views
希望这会给你一些额外的帮助
答案 3 :(得分:2)
使用以下查询。
USE YOURDBNAME
SELECT COUNT(*) AS totalTable from information_schema.tables
WHERE table_type = 'base table'
select Count(*) AS TotalProc from sys.procedures
答案 4 :(得分:1)
我现在使用下面的内容,根据Milica的答案,提供一些额外的类型,默认值并按计数排序。
SELECT 'Count' = COUNT(*), 'Type' = CASE type
WHEN 'AF' THEN 'Aggregate function (CLR)'
WHEN 'C' THEN 'CHECK constraints'
WHEN 'D' THEN 'Default or DEFAULT constraints'
WHEN 'F' THEN 'FOREIGN KEY constraints'
WHEN 'FN' THEN 'Scalar functions'
WHEN 'FS' THEN 'Assembly (CLR) scalar-function'
WHEN 'FT' THEN 'Assembly (CLR) table-valued function'
WHEN 'IF' THEN 'Inlined table-functions'
WHEN 'IT' THEN 'Internal table'
WHEN 'K' THEN 'PRIMARY KEY or UNIQUE constraints'
WHEN 'L' THEN 'Logs'
WHEN 'P' THEN 'Stored procedures'
WHEN 'PC' THEN 'Assembly (CLR) stored-procedure'
WHEN 'PG' THEN 'Plan guide'
WHEN 'PK' THEN 'PRIMARY KEY constraint'
WHEN 'R' THEN 'Rules'
WHEN 'RF' THEN 'Replication filter stored procedures'
WHEN 'S' THEN 'System tables'
WHEN 'SN' THEN 'Synonym'
WHEN 'SO' THEN 'Sequence object'
WHEN 'SQ' THEN 'Service queue'
WHEN 'TF' THEN 'Table functions'
WHEN 'TR' THEN 'Triggers'
WHEN 'U' THEN 'User tables'
WHEN 'UQ' THEN 'UNIQUE constraint'
WHEN 'V' THEN 'Views'
WHEN 'X' THEN 'Extended stored procedures'
ELSE type
END
FROM sys.objects
GROUP BY type
ORDER BY 'Count' desc
答案 5 :(得分:0)
使用此脚本。它没有使用switch case语句。
USE [MyDatabase]
GO
select distinct type_desc as 'Type Description', Count from
(SELECT 'Count' = COUNT(*), type FROM sys.objects GROUP BY type) as dbstatistics
left join sys.objects on dbstatistics.type = sys.objects.type ORDER BY Count desc
GO
答案 6 :(得分:-1)
SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'dbName';