Wednesday, July 1, 2015

How to create scripts of stored procedure modified on specific period

SET NOCOUNT ON;
DECLARE @HelpText TABLE
(
    Val NVARCHAR(MAX)
);

DECLARE @sp_names TABLE
(
    ID INT PRIMARY KEY IDENTITY,
    Name NVARCHAR(128)
);

DECLARE @sp_count INT,
        @count INT = 0,
        @sp_name NVARCHAR(128),
        @text NVARCHAR(MAX);

INSERT  @sp_names
SELECT  name
FROM    sys.Procedures  where name like '%salary%'  and modify_date between '2015-06-22 12:17:03.860' and '2015-07-01 11:38:35.187'

SET @sp_count = (SELECT COUNT(1) FROM sys.Procedures where name like '%salary%'  and modify_date between '2015-06-22 12:17:03.860' and '2015-07-01 11:38:35.187');

WHILE (@sp_count > @count)
BEGIN
    SET @count = @count + 1;
    SET @text = N'';

    SET @sp_name = (SELECT  name
                    FROM    @sp_names
                    WHERE   ID = @count);

    INSERT INTO @HelpText
    EXEC sp_HelpText @sp_name;

    SELECT  @text = COALESCE(@text + ' ' + Val, Val)
    FROM    @HelpText;
  declare @dropIfExists varchar(250) = '  IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].['+@sp_name+']'') AND type in (N''P'', N''PC''))
     DROP PROCEDURE [dbo].['+@sp_name+'] '
     PRINT 'GO'
     print @dropIfExists
     PRINT 'GO'
print @text
    DELETE FROM @HelpText;

 
END

Friday, June 19, 2015

get numbers of table in database used by front end application or any user


SELECT
t.name
,user_seeks
,user_scans
,user_lookups
,user_updates
,last_user_seek
,last_user_scan
,last_user_lookup
,last_user_update
FROM
sys.dm_db_index_usage_stats i JOIN
sys.tables t ON (t.object_id = i.object_id)
ORDER BY last_user_seek DESC
Folowing command will tell the procedure name executed

SELECT TOP 1000 d.object_id, d.database_id, OBJECT_NAME(object_id, database_id) 'proc name',
    d.cached_time, d.last_execution_time, d.total_elapsed_time,
    d.total_elapsed_time/d.execution_count AS [avg_elapsed_time],
    d.last_elapsed_time, d.execution_count
,DB_NAME(d.database_id) AS [SCHEMA_NAME]
FROM sys.dm_exec_procedure_stats AS d
where DB_NAME(d.database_id) = 'databaseName'
ORDER BY [last_execution_time] DESC;