Verifica Tabelas – SQL Server

Neste post irei mostrar um script no SQL Server para listar algumas informações referentes as tabelas no Data Base como quantidade de linhas, quantidade de colunas, espaço em disco da tabela, espaço em disco dos index e espaço não utilizado.

Script que retorna apenas um Device:

USE MeuDevice
GO

CREATE TABLE #AuxTemp (
	Table_Name sysname ,
	Row_Count int,
	Reserved_Size varchar(50),
	Data_Size varchar(50),
	Index_Size varchar(50),
	Unused_Size varchar(50),
)

	SET NOCOUNT ON 
	
	INSERT #AuxTemp
		EXEC sp_msforeachtable 'sp_spaceused ''?'''
						
	

		SELECT  
			A.Table_Name, A.Row_Count, COUNT(*) As Col_Count, 
			A.Data_Size, A.Index_Size, A.Unused_Size
		FROM 
			#AuxTemp a
		JOIN 
			Information_Schema.Columns b
		ON 
			A.Table_Name COLLATE DATABASE_DEFAULT = B.Table_Name COLLATE DATABASE_DEFAULT 
		GROUP BY 
			A.Table_Name, A.Row_Count, A.Data_Size, A.Index_Size, A.Unused_Size
		ORDER BY 
			Cast(Replace(A.Data_Size, 'KB', '') As Integer) DESC

DROP TABLE #AuxTemp

Script que retorna todos os Devices exceto o master, msdb, tempdb e model:

DECLARE
	 @sDeviceName	varchar(30)
	,@sQuery		varchar(max)

DECLARE AllDevices CURSOR FOR
	SELECT
		name
	FROM
		Sys.DataBases
	WHERE
		name Not In('master','msdb','tempdb', 'model')

OPEN AllDevices
FETCH NEXT FROM AllDevices INTO @sDeviceName

WHILE @@FETCH_STATUS = 0
BEGIN

	If @sDeviceName Is Not Null
	Begin

		Set @sQuery = 'Use ' + @sDeviceName + 
					  ' CREATE TABLE #AuxTemp (
							Table_Name sysname ,
							Row_Count int,
							Reserved_Size varchar(50),
							Data_Size varchar(50),
							Index_Size varchar(50),
							Unused_Size varchar(50),
							Data_Base sysname default(db_name())
						)

						SET NOCOUNT ON 
						INSERT #AuxTemp
							(Table_Name, Row_Count, Reserved_Size, Data_Size, Index_Size, Unused_Size)
							EXEC sp_msforeachtable ''sp_spaceused ''''?''''''
						
							SELECT  
								A.Data_Base, A.Table_Name, A.Row_Count, COUNT(*) As Col_Count, A.Data_Size, A.Index_Size,  
								A.Unused_Size
							FROM 
								#AuxTemp a
							JOIN 
								Information_Schema.Columns b
							ON 
								A.Table_Name COLLATE DATABASE_DEFAULT = B.Table_Name COLLATE DATABASE_DEFAULT 
							GROUP BY 
								A.Data_Base, A.Table_Name, A.Row_Count, A.Data_Size, A.Index_Size, A.Unused_Size
							ORDER BY 
								Cast(Replace(A.Data_Size, ''KB'', '''') As Integer) DESC

						DROP TABLE #AuxTemp'
			
		EXEC (@sQuery)

		FETCH NEXT FROM AllDevices INTO @sDeviceName
	End
END

CLOSE AllDevices
DEALLOCATE AllDevices

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s