Tuesday 21 April 2020

How to I get all the information of database by using T-SQL script ?


SELECT @@SERVERNAME As Server_Name,Database_Id,CONVERT(VARCHAR(25), DB.name) AS DBName,CONVERT(VARCHAR(10),
DATABASEPROPERTYEX(name, 'status')) AS [Status],State_Desc,
(SELECT COUNT(1) FROM sys.master_files WHERE DB_NAME(database_id) = DB.name AND type_desc = 'rows') AS Data_Files,
(SELECT SUM((size*8)/1024) FROM sys.master_files WHERE DB_NAME(database_id) = DB.name AND type_desc = 'rows') AS [Data_In_MB],
(SELECT COUNT(1) FROM sys.master_files WHERE DB_NAME(database_id) = DB.name AND type_desc = 'log') AS LogFiles,
(SELECT SUM((size*8)/1024) FROM sys.master_files WHERE DB_NAME(database_id) = DB.name AND type_desc = 'log') AS [Log_In_MB],
user_access_desc AS [User_Access],recovery_model_desc AS [Recovery_Model],
CASE compatibility_level
WHEN 60 THEN '60 (SQL Server 6.0)'
WHEN 65 THEN '65 (SQL Server 6.5)'
WHEN 70 THEN '70 (SQL Server 7.0)'
WHEN 80 THEN '80 (SQL Server 2000)'
WHEN 90 THEN '90 (SQL Server 2005)'
WHEN 100 THEN '100 (SQL Server 2008/R2)'
WHEN 110 THEN '110 (SQL Server 2012)'
WHEN 120 THEN '120 (SQL Server 2014)'
WHEN 130 THEN '130 (SQL Server 2016)'
WHEN 140 THEN '140 (SQL Server 2017)'
WHEN 150 THEN '150 (SQL Server 2019)'
END AS [Compatibility_Level],
CONVERT(VARCHAR(20), create_date, 103) + ' ' + CONVERT(VARCHAR(20), create_date, 108) AS [Creation_Date],
-- last backup
ISNULL
(
(
SELECT TOP 1 CASE TYPE WHEN 'D' THEN 'Full' WHEN 'I' THEN 'Differential' WHEN 'L' THEN 'Transaction log' END + ' – ' +
LTRIM(ISNULL(STR(ABS(DATEDIFF(DAY, GETDATE(),Backup_finish_date))) + ' days ago', 'NEVER')) + ' – ' +
CONVERT(VARCHAR(20), backup_start_date, 103) + ' ' + CONVERT(VARCHAR(20), backup_start_date, 108) + ' – ' +
CONVERT(VARCHAR(20), backup_finish_date, 103) + ' ' + CONVERT(VARCHAR(20), backup_finish_date, 108) +
' (' + CAST(DATEDIFF(second, BK.backup_start_date,
BK.backup_finish_date) AS VARCHAR(4)) + ' '
+ 'seconds)'
FROM msdb..backupset BK WHERE BK.database_name = DB.name ORDER BY backup_set_id DESC
)
,'-'
) AS [Last_Backup],
CASE WHEN is_fulltext_enabled = 1 THEN 'Fulltext enabled' ELSE '' END AS [Full_Text],
CASE WHEN is_auto_close_on = 1 THEN 'autoclose' ELSE '' END AS [Auto_Close],page_verify_option_desc AS [Page_Verify_Option],
CASE WHEN is_read_only = 1 THEN 'read only' ELSE '' END AS [Read_Only],
CASE WHEN is_auto_shrink_on = 1 THEN 'autoshrink' ELSE '' END AS [Auto_Shrink],
CASE WHEN is_auto_create_stats_on = 1 THEN 'auto create statistics' ELSE '' END AS [Aut_Create_Statistics],
CASE WHEN is_auto_update_stats_on = 1 THEN 'auto update statistics' ELSE '' END AS [Auto_Update_Statistics],
CASE WHEN is_in_standby = 1 THEN 'standby' ELSE '' END AS [Standby],
CASE WHEN is_cleanly_shutdown = 1 THEN 'cleanly shutdown' ELSE '' END AS [Cleanly_Shutdown]
FROM sys.databases DB
ORDER BY DBName, [Last_backup] DESC, NAME

How to I get all objects count in all databases by using T-SQL script?


Declare @Qry_Results nvarchar(max)
select @Qry_Results = coalesce(@Qry_Results + char(13) + char(10) + ' UNION ALL ','') +
'
SELECT ' + QUOTENAME([Name],'''') + ' as DBName, [AGGREGATE_FUNCTION], [CHECK_CONSTRAINT],[DEFAULT_CONSTRAINT],[FOREIGN_KEY_CONSTRAINT],
[SQL_SCALAR_FUNCTION],[CLR_SCALAR_FUNCTION],[CLR_TABLE_VALUED_FUNCTION],[SQL_INLINE_TABLE_VALUED_FUNCTION],[INTERNAL_TABLE],
[SQL_STORED_PROCEDURE],[CLR_STORED_PROCEDURE],[PLAN_GUIDE],[PRIMARY_KEY_CONSTRAINT],[RULE],[REPLICATION_FILTER_PROCEDURE],
[SYNONYM],[SERVICE_QUEUE],[CLR_TRIGGER],[SQL_TABLE_VALUED_FUNCTION],[SQL_TRIGGER],[TABLE_TYPE],[USER_TABLE],[UNIQUE_CONSTRAINT],
[VIEW],[EXTENDED_STORED_PROCEDURE]
from
(
select [Name], type_Desc
from ' + quotename([Name]) + '.sys.objects where is_ms_shipped = 0) src
PIVOT (
count([Name])
FOR type_desc in ([AGGREGATE_FUNCTION], [CHECK_CONSTRAINT],[DEFAULT_CONSTRAINT],[FOREIGN_KEY_CONSTRAINT],[SQL_SCALAR_FUNCTION],
[CLR_SCALAR_FUNCTION],[CLR_TABLE_VALUED_FUNCTION],[SQL_INLINE_TABLE_VALUED_FUNCTION],[INTERNAL_TABLE],[SQL_STORED_PROCEDURE],
[CLR_STORED_PROCEDURE],[PLAN_GUIDE],[PRIMARY_KEY_CONSTRAINT],[RULE],[REPLICATION_FILTER_PROCEDURE],[SYNONYM],[SERVICE_QUEUE],
[CLR_TRIGGER],[SQL_TABLE_VALUED_FUNCTION],[SQL_TRIGGER],[TABLE_TYPE],[USER_TABLE],[UNIQUE_CONSTRAINT],[VIEW],[EXTENDED_STORED_PROCEDURE]
)
) pvt
'
from sys.databases
where [name] NOT IN ('master','tempdb','model','msdb') order by [Name]

execute(@Qry_Results)

How to I get all object names along with schema name details in all databases by using T-SQL Script?

USE MASTER;
DECLARE @name sysname;
DECLARE @sql nvarchar(max) = '
SELECT
DB_NAME() AS [database_name],
OBJECT_SCHEMA_NAME(object_id) AS [schema_name],
name AS ObjectName,
type,
type_desc
FROM sys.objects Where type in (''FN'',''U'',''V'',''IT'',''P '')
';
DECLARE @theSQL nvarchar(max);
DECLARE @results TABLE (
[database_name] sysname,
[schema_name] sysname,
[ObjectName] sysname,
[type] sysname,
[type_desc] sysname
);

DECLARE dbs CURSOR STATIC LOCAL FORWARD_ONLY READ_ONLY
FOR
SELECT name
FROM sys.databases
-- you may want to exclude system databases here
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb', 'distribution')
And state_desc!='OFFLINE'
OPEN dbs;
FETCH NEXT FROM dbs INTO @name;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @theSQL = 'EXEC ' + QUOTENAME(@name) + '.sys.sp_executesql @sql';
INSERT @results
EXEC sys.sp_executesql @theSQL, N'@sql nvarchar(max)', @sql
FETCH NEXT FROM dbs INTO @name;
END
CLOSE dbs;
DEALLOCATE dbs;

SELECT *
FROM @results;

How do I get all table count in all databases from the SQL Server Instance by using T-SQL Script ?



Declare @sql nvarchar(max);
Select @sql =
    (select ' UNION ALL
        select @@ServerName As ServerName ,' +  + quotename(name,'''') + ' as database_name,                              Count( t.name)  as table_name
       FROM '+ quotename(name) + '.sys.tables t
         JOIN '+ quotename(name) + '.sys.schemas s   on s.schema_id = t.schema_id'
    from sys.databases
    where state=0 and database_id>4
--Group by name
    order by [name] for xml path(''), type).value('.', 'nvarchar(max)');
set @sql = stuff(@sql, 1, 12, '') + ' order by database_name,table_name';
execute (@sql)