데이터베이스에서 각 테이블의 행 수를 나열하는 방법 일부
select count(*) from table1
select count(*) from table2
...
select count(*) from tableN
나는 해결책을 게시 할 것이지만 다른 접근법은 환영합니다.
답변
SQL Server 2005 이상을 사용하는 경우 다음을 사용할 수도 있습니다.
SELECT
t.NAME AS TableName,
i.name as indexName,
p.[Rows],
sum(a.total_pages) as TotalPages,
sum(a.used_pages) as UsedPages,
sum(a.data_pages) as DataPages,
(sum(a.total_pages) * 8) / 1024 as TotalSpaceMB,
(sum(a.used_pages) * 8) / 1024 as UsedSpaceMB,
(sum(a.data_pages) * 8) / 1024 as DataSpaceMB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME NOT LIKE 'dt%' AND
i.OBJECT_ID > 255 AND
i.index_id <= 1
GROUP BY
t.NAME, i.object_id, i.index_id, i.name, p.[Rows]
ORDER BY
object_name(i.object_id)
제 생각에는 sp_msforeachtable
출력 보다 처리하기가 더 쉽습니다 .
답변
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=21021 에서 찾은 스 니펫 은 다음과 같습니다.
select t.name TableName, i.rows Records
from sysobjects t, sysindexes i
where t.xtype = 'U' and i.id = t.id and i.indid in (0,1)
order by TableName;
답변
SQL Management Studio에서 해당 정보를 얻으려면 데이터베이스를 마우스 오른쪽 단추로 클릭 한 후 보고서-> 표준 보고서-> 테이블 별 디스크 사용량을 선택하십시오.
답변
SELECT
T.NAME AS 'TABLE NAME',
P.[ROWS] AS 'NO OF ROWS'
FROM SYS.TABLES T
INNER JOIN SYS.PARTITIONS P ON T.OBJECT_ID=P.OBJECT_ID;
답변
여기에서 볼 수 있듯이 메타 데이터 테이블을 사용하는 메서드는 추정값 만 반환하는 올바른 카운트를 반환합니다.
CREATE PROCEDURE ListTableRowCounts
AS
BEGIN
SET NOCOUNT ON
CREATE TABLE #TableCounts
(
TableName VARCHAR(500),
CountOf INT
)
INSERT #TableCounts
EXEC sp_msForEachTable
'SELECT PARSENAME(''?'', 1),
COUNT(*) FROM ? WITH (NOLOCK)'
SELECT TableName , CountOf
FROM #TableCounts
ORDER BY TableName
DROP TABLE #TableCounts
END
GO
답변
sp_MSForEachTable 'DECLARE @t AS VARCHAR(MAX);
SELECT @t = CAST(COUNT(1) as VARCHAR(MAX))
+ CHAR(9) + CHAR(9) + ''?'' FROM ? ; PRINT @t'
산출:
답변
운 좋게도 SQL Server 관리 스튜디오는이를 수행하는 방법에 대한 힌트를 제공합니다. 이 작업을 수행,
- SQL Server 추적을 시작하고 수행중인 활동 (독립적이 아닌 경우 로그인 ID로 필터링하고 응용 프로그램 이름을 Microsoft SQL Server Management Studio로 설정)을 열고 추적을 일시 중지하고 지금까지 기록한 모든 결과를 삭제하십시오.
- 그런 다음 테이블을 마우스 오른쪽 버튼으로 클릭하고 팝업 메뉴에서 속성을 선택하십시오.
- 추적을 다시 시작하십시오.
- 이제 SQL Server Management Studio에서 왼쪽의 저장소 속성 항목을 선택하십시오.
추적을 일시 정지하고 Microsoft가 TSQL을 생성하는 것을 살펴보십시오.
아마도 마지막 쿼리에서 다음으로 시작하는 문장을 볼 수 있습니다 exec sp_executesql N'SELECT
실행 된 코드를 Visual Studio에 복사하면이 코드가 Microsoft 엔지니어가 속성 창을 채우는 데 사용하는 모든 데이터를 생성한다는 것을 알 수 있습니다.
해당 쿼리를 약간 수정하면 다음과 같은 결과가 나타납니다.
SELECT
SCHEMA_NAME(tbl.schema_id)+'.'+tbl.name as [table], --> something I added
p.partition_number AS [PartitionNumber],
prv.value AS [RightBoundaryValue],
fg.name AS [FileGroupName],
CAST(pf.boundary_value_on_right AS int) AS [RangeType],
CAST(p.rows AS float) AS [RowCount],
p.data_compression AS [DataCompression]
FROM sys.tables AS tbl
INNER JOIN sys.indexes AS idx ON idx.object_id = tbl.object_id and idx.index_id < 2
INNER JOIN sys.partitions AS p ON p.object_id=CAST(tbl.object_id AS int) AND p.index_id=idx.index_id
LEFT OUTER JOIN sys.destination_data_spaces AS dds ON dds.partition_scheme_id = idx.data_space_id and dds.destination_id = p.partition_number
LEFT OUTER JOIN sys.partition_schemes AS ps ON ps.data_space_id = idx.data_space_id
LEFT OUTER JOIN sys.partition_range_values AS prv ON prv.boundary_id = p.partition_number and prv.function_id = ps.function_id
LEFT OUTER JOIN sys.filegroups AS fg ON fg.data_space_id = dds.data_space_id or fg.data_space_id = idx.data_space_id
LEFT OUTER JOIN sys.partition_functions AS pf ON pf.function_id = prv.function_id
이제 쿼리가 완벽하지 않고 다른 질문에 맞게 업데이트 할 수 있습니다. 요점은 Microsoft에 대한 지식을 사용하여 관심있는 데이터를 실행하여 필요한 대부분의 질문에 도달 할 수 있다는 것입니다. 프로파일 러를 사용하여 생성 된 TSQL
MS 엔지니어가 SQL 서버의 작동 방식을 알고 있다고 생각하고 사용중인 SSMS의 버전을 사용하여 작업 할 수있는 모든 항목에서 작동하는 TSQL을 생성한다고 생각하고 싶습니다. 미래.
그리고 그냥 복사하지 말고 이해하려고 노력하십시오. 그렇지 않으면 잘못된 해결책으로 끝날 수 있습니다.
월터