Wednesday, March 21, 2018

SQL Server DBA general queries - B


SQL Generic Queries 

1.       Shrink all databases
2.       Index Rebuild All databases
3.       CPU Utilization
4.       Table comparison
5.       List of files with directory name and creation date
6.       SPLIT Function
7.       Remove Multiple Space into single space
8.       Remove New line char Multiple Space from String
9.       Fetch String Data Only
10.   Fetch Digits Only
11.   Word Count Function
12.   SP_ ExecuteSQL Example
13.   SP_ MSforeachtable Example


Shrink All databases


SET NOCOUNT ON
DECLARE @tbl TABLE
(
      ID INT IDENTITY(1,1),
      DBNAME NVARCHAR(1000),
      [FileName] NVARCHAR(1000)
)
INSERT INTO @tbl
SELECT DB_NAME(DbID),st.NAme from sys.sysaltfiles  ST INNER JOIN Sys.databases SB on  ST.dbid = sb.database_id
where
st.dbid>6 --sb.NAme not in ('master','tempdb','model','msdb','ReportServer','ReportServerTempDB')
And FileName LIKE '%ldf' and sb.state = 0  And state_desc = 'ONLINE'
DECLARE @MinID INT , @MaxID INT,@DBName NVARCHAR(1000),@FileName NVARCHAR(1000),@RecoveryModel NVARCHAR(1000),@SQL NVARCHAR(MAX)
SELECT @MinID = MIN(ID),@MaxID = MAX(ID) FROM @tbl
WHILE(@MinID <=@MaxID)
BEGIN
      SELECT @DBName = DBNAME,@FileName=[FileName] FROM @tbl where ID = @MinID

      SELECT      @RecoveryModel = recovery_model_desc FROM sys.databases where name = @DBName

      SELECT      @SQL= N'USE ['+ @DBName+']'+CHAR(10)
      +CASE WHEN @RecoveryModel <> N'SIMPLE' THEN N'ALTER DATABASE ['+@DBName+'] SET RECOVERY SIMPLE WITH NO_WAIT' ELSE N''END+CHAR(10)
      +N'DBCC SHRINKFILE(N'+Quotename(@FileName,'''')+',1)'+CHAR(10)
      +CASE WHEN @RecoveryModel <> N'SIMPLE' THEN N'ALTER DATABASE ['+@DBName+'] SET RECOVERY '+@RecoveryModel+N' WITH NO_WAIT'+CHAR(10) ELSE N'' END
      --Print(@SQL)
      EXEC SP_EXECUTESQL @SQL
      SELECT @MinID = @MinID +1
END

SET NOCOUNT OFF


Shrink all DBs

-- Description: Maintanace Activity : SP to generate script to shrink the huge databases
-- ============================================= 
--Exec Shrink_All_DB

CREATE Proc [dbo].[Shrink_All_DB]
As

SET NOCOUNT ON
Select dbid,DB_NAME(dbid) As DBName,recovery_model_desc
INTO #Orig_DB_State
From sys.sysaltfiles A Inner Join sys.databases B
On A.[dbid] = B.[database_id]
Where Right([filename],3)='ldf'
And  [Size] > 1000
Order By Dbid

Print 'XP_Fixeddrives'
Print ('Go')

Declare @DBName Varchar(100),@Rec_Mod Varchar(100),@SQL Varchar(300), @DB_FileName Varchar(100)
Declare CHANGE_Recovery_CURSOR Cursor for
     Select  DBName,recovery_model_desc from #Orig_DB_State
open CHANGE_Recovery_CURSOR
Fetch next from CHANGE_Recovery_CURSOR INTO @DBName,@Rec_Mod
      while @@Fetch_Status=0
      BEGIN
     
      Exec ('Use ['+@DBName+']')
      Print ('Use '+Quotename(@DBName,'[]'))
      Print ('Go')
      --Exec (@SQL)
     
      Select @DB_FileName = name From sys.sysaltfiles Where Right([filename],3)='ldf' And DB_NAME(dbid) = @DBName
     
      IF(@Rec_Mod = 'FULL')
      Begin
            -- Truncate the log by changing the database recovery model to SIMPLE.
            SET @SQL = 'ALTER DATABASE '+Quotename(Convert(VARCHAR(100),@DBName),'[]')+' SET RECOVERY SIMPLE WITH NO_WAIT '
                  Print (@SQL)           
                  --Exec (@SQL)
                  Print ('Go')
      End
           
            SET @SQL = 'Insert Into dbo.DB_Shrinking_Log(DatabaseName,Used_SizeMB,FreeSpace_SizeMB)
            Select '+Quotename(@DBName,'''')+' ,(Convert(Bigint,size)*8)/1024 ,((Convert(Bigint,max_size)*8)/1024)-((Convert(Bigint,size)*8)/1024)
            FROM '+Quotename(@DBName,'[]')+'.sys.database_files
            Where type_desc = ''LOG'''
           
            --Print (@SQL)   
            -- Shrink the truncated log file to 0 MB.
                  SET @SQL = 'DBCC SHRINKFILE ('+Quotename(Convert(VARCHAR(100),@DB_FileName),'[]')+', 0)'
                        Print (@SQL)           
                        --Exec (@SQL)
                        Print ('Go')                       

      IF(@Rec_Mod = 'FULL')
      Begin
            -- Reset the database recovery model.
            SET @SQL = 'ALTER DATABASE '+Quotename(Convert(VARCHAR(100),@DBName),'[]')+' SET RECOVERY FULL WITH NO_WAIT '
                  Print (@SQL)           
                  --Exec (@SQL)
                  Print ('Go')
      End

      Fetch next from CHANGE_Recovery_CURSOR INTO @DBName,@Rec_Mod
      END
CLOSE CHANGE_Recovery_CURSOR
DEALLOCATE CHANGE_Recovery_CURSOR

Print 'XP_Fixeddrives'
Print ('Go')


Index Rebuild All databases

Create Proc IndexRebuild_All_DB
As
SET NOCOUNT ON
DECLARE @Database VARCHAR(255)  
DECLARE @Table VARCHAR(255),@Table_Short  VARCHAR(255)
DECLARE @cmd NVARCHAR(4000) 
DECLARE @fillfactor INT ,@bit Bit
--DECLARE @Avg_Frag Float

SET @fillfactor = 90

DECLARE DatabaseCursor CURSOR FOR 
SELECT [name] FROM sys.databases
Where user_access = 0  And [state] = 0
And database_id >= 5
And [Name] Not In('ReportServer$SQL','ReportServer$SQLTempDB','distribution')
--And [Name] in('test_sonora')
ORDER BY 1 

--=============================
-- Temp table for logging
--=============================
IF OBJECT_ID('tempdb.dbo.#ObjDetails') IS NOT NULL
      DROP TABLE #ObjDetails
CREATE TABLE #ObjDetails (
Rowid Int Identity(1,1),
DBName Varchar(200),
Table_Name Varchar(200),
Avg_Frag Float,
[Action] Varchar(30),
Dt_Stamp Datetime Default(Getdate())
)



OPEN DatabaseCursor 
FETCH NEXT FROM DatabaseCursor INTO @Database 
WHILE @@FETCH_STATUS = 0 
BEGIN 

      Print 'DB Name ==>'+DB_Name(DB_ID(@Database))

                  SET @cmd = 'Insert Into Table_Fragment_Before(database_id,object_id,avg_fragmentation_in_percent) '+CHAR(10)
                  SET @cmd = @cmd + ' Select database_id,NULL,NULL FROM SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(' +Quotename(@Database,'''') + ' ),NULL,NULL,NULL,NULL) F Where Object_Name(object_id)= ' +Quotename(@Table_Short,'''')+CHAR(10)
               --Print(@cmd)
           Exec (@cmd)
           SET @cmd = ' Insert Into #ObjDetails(DBName,Table_Name,Avg_Frag,[Action])' +CHAR(10)
               SET @cmd = @cmd + ' Values( ''' +@Database + ''', '+Quotename('Start Processing','''')+',0,'''+'DB'+''')'+Char(10)
              --Print(@cmd)
               Exec (@cmd)

          
   SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT ''['' + table_catalog + ''].['' + table_schema + ''].['' +
  table_name + '']'' as tableName FROM [' + @Database + '].INFORMATION_SCHEMA.TABLES
  WHERE table_type = ''BASE TABLE'' '
--  And table_name = ''SONORAREPOSITORY''  '  

   -- create table cursor 
   EXEC (@cmd) 
   OPEN TableCursor  

   FETCH NEXT FROM TableCursor INTO @Table  
   WHILE @@FETCH_STATUS = 0  
   BEGIN  
     
      Select @Table_Short = Reverse(Substring(Reverse(@Table),2,CHARINDEX('[',Reverse(@Table),0 )-2))

            --Print ('Table Name ==>  '+@Table_Short)

                  SET @cmd = 'Insert Into Table_Fragment_Before(database_id,object_id,avg_fragmentation_in_percent) '+CHAR(10)
                  SET @cmd = @cmd + ' Select database_id,object_id,avg_fragmentation_in_percent FROM SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(' +Quotename(@Database,'''') + ' ),NULL,NULL,NULL,NULL) F Where Object_Name(object_id)= ' +Quotename(@Table_Short,'''')+CHAR(10)
               --Print(@cmd)
           Exec (@cmd)


           -- SQL 2005 or higher command
           SET @cmd = 'Declare @a bit,@Avg_Frag  Float = 0'+CHAR(10)
           SET @cmd = @cmd + 'Select @Avg_Frag = ISNULL(avg_fragmentation_in_percent,0) FROM SYS.DM_DB_INDEX_PHYSICAL_STATS (DB_ID(' +Quotename(@Database,'''') + ' ),NULL,NULL,NULL,NULL) F Where Object_Name(object_id)= ' +Quotename(@Table_Short,'''')+'  And avg_fragmentation_in_percent > 0'+CHAR(10)
           SET @cmd = @cmd + ' If (@Avg_Frag > 30)'+CHAR(10)
           SET @cmd = @cmd + ' Begin '+CHAR(10) 
           SET @cmd = @cmd + ' Print '+'''RB'''+CHAR(10)                              
           SET @cmd = @cmd +' ALTER INDEX ALL ON ' + @Table + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')' +CHAR(10)
           SET @cmd = @cmd + ' Insert Into #ObjDetails(DBName,Table_Name,Avg_Frag,[Action])' +CHAR(10)
               SET @cmd = @cmd + ' SELECT ''' +@Database + ''', Table_Name,@Avg_Frag,'''+'RB'+''' From  INFORMATION_SCHEMA.TABLES Where TABLE_NAME = ' +Quotename(@Table_Short,'''')+CHAR(10)
           SET @cmd = @cmd + ' End '+CHAR(10)
           SET @cmd = @cmd + ' Else If (@Avg_Frag Between 1 And 30)'+CHAR(10)
           SET @cmd = @cmd + ' Begin '+CHAR(10)          
           SET @cmd = @cmd + ' Print '+'''RO'''+CHAR(10)                                         
           SET @cmd = @cmd +' ALTER INDEX ALL ON ' + @Table + ' REORGANIZE ' +CHAR(10)
           SET @cmd = @cmd + ' Insert Into #ObjDetails(DBName,Table_Name,Avg_Frag,[Action])' +CHAR(10)
               SET @cmd = @cmd + ' SELECT ''' +@Database + ''', Table_Name,@Avg_Frag,'''+'RO'+''' From  INFORMATION_SCHEMA.TABLES Where TABLE_NAME = ' +Quotename(@Table_Short,'''')+Char(10)
           SET @cmd = @cmd + ' End '+CHAR(10)          
           SET @cmd = @cmd + ' Else '+CHAR(10)
           SET @cmd = @cmd + ' Begin '+CHAR(10)          
           SET @cmd = @cmd + ' Set @a = 100'+CHAR(10)          
          -- SET @cmd = @cmd + ' Print '+'''N/A'''+CHAR(10)                                         
           SET @cmd = @cmd + ' End '+CHAR(10)          

              -- Print(@cmd)
           Exec (@cmd)


       FETCH NEXT FROM TableCursor INTO @Table  
   END  

   CLOSE TableCursor  
   DEALLOCATE TableCursor 

   FETCH NEXT FROM DatabaseCursor INTO @Database 
END 
CLOSE DatabaseCursor  
DEALLOCATE DatabaseCursor


Select * from #ObjDetails
Drop table #ObjDetails

/*
Create Table Table_Fragment_Before
(
database_id Int,
object_id Bigint,
avg_fragmentation_in_percent Float,
DateTimeStamp Datetime Default(Getdate())
)

Create Table Table_Fragment_After
(
database_id Int,
object_id Bigint,
avg_fragmentation_in_percent Float,
DateTimeStamp Datetime Default(Getdate())
)

*/

CPU Utilization



/*
Create Table CPU_Utilization
(
      row_num     int ,
      DatabaseName Varchar(255),   
      CPU_Time_Ms Bigint,
      CPUPercent DECIMAL(5,2),
      [Timestamp] Datetime
)
*/

/******************* #2 **********************/
WITH  DB_CPU_Stats
        AS (
             SELECT
                  DatabaseID
                , DB_NAME(DatabaseID) AS [DatabaseName]
                , SUM(total_worker_time) AS [CPU_Time_Ms]
             FROM
                  sys.dm_exec_query_stats AS qs
                  CROSS APPLY (
                                SELECT
                                    CONVERT(INT , value) AS [DatabaseID]
                                FROM
                                    sys.dm_exec_plan_attributes(qs.plan_handle)
                                WHERE
                                    attribute = N'dbid'
                              ) AS F_DB
             GROUP BY
                  DatabaseID
           )
      SELECT
            ROW_NUMBER() OVER ( ORDER BY [CPU_Time_Ms] DESC ) AS [row_num]
          , DatabaseName
          , [CPU_Time_Ms]
          , CAST([CPU_Time_Ms] * 1.0 / SUM([CPU_Time_Ms]) OVER ( ) * 100.0 AS DECIMAL(5 , 2)) AS [CPUPercent]
          Into #CPU_Ut
      FROM
            DB_CPU_Stats
      WHERE
            DatabaseID > 4 -- system databases
            AND DatabaseID <> 32767 -- ResourceDB
ORDER BY row_num


Declare @Timestamp Datetime
Select @Timestamp = GETDATE()
Insert Into dbo.CPU_Utilization(row_num,DatabaseName,CPU_Time_Ms,CPUPercent,Timestamp)
Select  row_num,DatabaseName,CPU_Time_Ms,CPUPercent,@Timestamp from #CPU_Ut
Drop Table #CPU_Ut

Select * from Test.dbo.CPU_Utilization

Table comparison

Select ISNULL(B.COLUMN_NAME,'') As Std_Columns , ISNULL(A.COLUMN_NAME,'') As MAIN_Col ,
Case when B.COLUMN_NAME = A.COLUMN_NAME Then 'MATCHED'
when B.COLUMN_NAME IS NULL AND  A.COLUMN_NAME IS NOT NULL Then 'NEW COLUMN ADDED IN MAIN'
when B.COLUMN_NAME IS NOT NULL AND  A.COLUMN_NAME IS NULL Then 'COLUMN EXISTS IN STANDARD COLUMNS BUT NOT IN MAIN TABLE'
ELSE '' END AS REMARKS
INTO #TEMP
from
(
Select COLUMN_NAME from DB1.INFORMATION_SCHEMA.COLUMNS Where TABLE_NAME = 'Main_2012_2013'
)A
Full Join
(
Select COLUMN_NAME from DB2.INFORMATION_SCHEMA.COLUMNS Where TABLE_NAME = 'Main'
)B
On A.COLUMN_NAME = B.COLUMN_NAME


Select Remarks,COUNT(1) As ColumnCount from #TEMP
Group By Remarks

 


List of files with directory name and creation date

Create Proc [dbo].[FileList_SP_Size]
(
@DirPath NVarchar(255)
)
As
--Declare @DirPath NVarchar(255)
--Set @DirPath  = 'D:\Data_Consolidation\Source_Files\FederalMougal\VOU_40\Proceed\'

Declare @SQL Nvarchar(255)

Create table #tmp
(
Txt nvarchar(500),
Dir nvarchar(500),
[FileSize] nvarchar(100)
)


Set @SQL  = 'Dir/aa/s/p '+CONVERT(NVarchar(255),@DirPath)+'*.*'

Insert Into #tmp(Txt)
Exec Xp_cmdshell @SQL   --'Dir/aa/s/p '+CONVERT(NVarchar(255),@DirPath)+'*.*'

Print(@SQL)
Alter Table #tmp Add [Date1] nvarchar(50)


Delete from #tmp
Where txt is null
--OR txt Like ' Directory%'
OR txt Like '%file%bytes%'
OR txt Like '%Volume%ser%'
OR txt Like 'Volume%in%'
OR txt = '%bytes%free%'
OR Ltrim(txt) = ''



Update #tmp 
      Set txt = Ltrim(Rtrim(SUBSTRING(txt,40,200))),
      [FileSize]= Replace(Ltrim(Rtrim(SUBSTRING(txt,25,15))),',',''),
            [Date1] = Left(txt,20)
Where txt not Like ' Directory%'
Delete from #tmp
Where txt is null
OR txt = '%bytes%free%'
OR Ltrim(txt) = ''



Alter Table #tmp Add Rowid int IDENTITY(1,1)

Update #Tmp Set Dir = Txt
Where txt Like ' Directory%'




Declare @Rowid int ,@Txt Nvarchar(255),@Dir Nvarchar(255)
Declare File_CURSOR Cursor for
     Select  Rowid,Txt,Dir from #tmp Where txt Like ' Directory%' Order By Rowid Desc
open File_CURSOR
Fetch next from File_CURSOR INTO @Rowid ,@Txt ,@Dir
      while @@Fetch_Status=0
      BEGIN
                  Update #Tmp Set Dir = @Dir
                  Where Rowid >= @Rowid
                  And Dir is null


      Fetch next from File_CURSOR INTO @Rowid ,@Txt ,@Dir
      END
CLOSE File_CURSOR
DEALLOCATE File_CURSOR

Update #Tmp Set Dir = Replace(Dir,' Directory of','')

Select Rowid, Txt As [File name],Dir As [Directory Name] , [FileSize],[Date1]  from #Tmp
Where Txt Not Like 'bytes%free%'
And Date1 is not null

SPLIT Function

--Select * from dbo.Split('aa,bb,cc,dd,ee,ff,ggg',',')
Create FUNCTION [dbo].[Split]
(    
      @List  Nvarchar(4000),
      @SplitOn nvarchar(5)
)
RETURNS @RtnValue table
(
           
      Id int identity(1,1),
      Value nvarchar(4000)
)
AS 
BEGIN
      While (Charindex(@SplitOn,@List)>0)
      Begin
            Insert Into @RtnValue (value)
            Select Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
            Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
      End
      Insert Into @RtnValue (Value)
      Select Value = ltrim(rtrim(@List))
      Return
END


Remove Multiple Space into single space

-- =============================================   
-- Author:  <Shagaf Khot>   
-- Description: Remove space from string
-- =============================================  
--Select [dbo].[Remove_spaces]('abc     def gh           ij')
CREATE FUNCTION [dbo].[Remove_spaces](@str  Nvarchar(4000))
RETURNS  Nvarchar(4000)
AS
BEGIN

WHILE CHARINDEX(Space(2), @str) > 0
      SET @str = REPLACE(@str, Space(2), Space(1))

RETURN Ltrim(Rtrim(@str))
END

GO

Remove New line char Multiple Space from String


IF EXISTS(Select 1 from sysobjects where [type] = 'FN' And name = 'Remove_CR_TAB_Space')
      Drop FUNCTION Remove_CR_TAB_Space
Go
-- =============================================   
-- Author:  <Shagaf Khot>   
-- Description: Remove New Line Char and multiple spaces from string
-- =============================================  
CREATE FUNCTION Remove_CR_TAB_Space(@str Nvarchar(4000))
RETURNS  Nvarchar(4000)
AS
BEGIN
Declare @CR NVarchar(10),@TAB NVarchar(10)
Set @CR = Char(13)+Char(10)
Set @TAB = Char(9)
WHILE CHARINDEX(@CR, @str) > 0
      SET @str = REPLACE(@str, @CR, ' ')

WHILE CHARINDEX(@TAB, @str) > 0
      SET @str = REPLACE(@str, @TAB, ' ')

WHILE CHARINDEX(Space(2), @str) > 0
      SET @str = REPLACE(@str, Space(2), Space(1))


RETURN Ltrim(Rtrim(@str))
END

Go


Remove special characters from String


---- SP Detail : Remove special characters from String
---- ======================================================================
-- select dbo.RemoveSpecialChars('abc-123+ABC     & nbu %^%(^$%$#(*)(')
Create function [dbo].[RemoveSpecialChars] (@s varchar(256)) returns varchar(256)
   with schemabinding
begin
   if @s is null
      return null
   declare @s2 varchar(256)
   set @s2 = ''
   declare @l int
   set @l = len(@s)
   declare @p int
   set @p = 1
   while @p <= @l begin
      declare @c int
      set @c = ascii(substring(@s, @p, 1))
      if @c =  38  or @c between 48 and 57 or @c between 65 and 90 or @c between 97 and 122
         set @s2 = @s2 + char(@c)
      set @p = @p + 1
      end
   if len(@s2) = 0
      return null
   return @s2
   end

Fetch String Data Only

-- Function Detail : Function to fetch the string data only
-- ======================================================================
-- SELECT dbo.UFNG_ONLY_STRING('8asdf7%87^A8876-*S')
CREATE FUNCTION [dbo].[UFNG_ONLY_STRING] (@StrVal AS VARCHAR(max))
RETURNS VARCHAR(max)
AS
BEGIN
      WHILE PATINDEX('%[^A-z]%', @StrVal) > 0
            SET @StrVal = REPLACE(@StrVal,
                SUBSTRING(@StrVal,PATINDEX('%[^A-z]%', @StrVal),1),'')
      RETURN @StrVal
END

Fetch Digits Only


-- SELECT dbo.UFNG_ONLY_DIGITS('8asdf7%87^A8876-*S')
CREATE FUNCTION [dbo].[UFNG_ONLY_DIGITS] (@StrVal AS VARCHAR(max))
RETURNS VARCHAR(max)
AS
BEGIN
      WHILE PATINDEX('%[^0-9]%', @StrVal) > 0
            SET @StrVal = REPLACE(@StrVal,
                SUBSTRING(@StrVal,PATINDEX('%[^0-9]%', @StrVal),1),'')
      RETURN @StrVal
END
GO

Word Count Function


CREATE FUNCTION [dbo].[WordCount] ( @InputString VARCHAR(4000) )
RETURNS INT
AS
BEGIN

DECLARE @Index          INT
DECLARE @Char           CHAR(1)
DECLARE @PrevChar       CHAR(1)
DECLARE @WordCount      INT

SET @Index = 1
SET @WordCount = 0

WHILE @Index <= LEN(@InputString)
BEGIN
    SET @Char     = SUBSTRING(@InputString, @Index, 1)
    SET @PrevChar = CASE WHEN @Index = 1 THEN ' '
                         ELSE SUBSTRING(@InputString, @Index - 1, 1)
                    END

    IF @PrevChar = ' ' AND @Char != ' '
        SET @WordCount = @WordCount + 1

    SET @Index = @Index + 1
END

RETURN @WordCount

END
GO

SP_ExecuteSQL Example


DECLARE @ParmDefinition nvarchar(500),@Filename nvarchar(500)
Declare @SQLString NVarchar(MAX)
SET @ParmDefinition = N'@Filename_2 NVARCHAR(500) OUTPUT'
Set @SQLString = N'
      Set @Filename_2 = ''D:\HQ\HQ_Q4_File_Sample.xlsx''
';
Print(@SQLString)
EXECUTE sp_executesql @SQLString,@ParmDefinition,@Filename_2 = @Filename OUTPUT
Select @Filename

SP_ MSforeachtable Example



SELECT *
FROM information_schema.routines ISR
WHERE CHARINDEX('dbo.First', ISR.ROUTINE_DEFINITION) > 0
 GO
-- Method 3: Using DMV sys.dm_sql_referencing_entities
SELECT referencing_schema_name, referencing_entity_name,
referencing_id, referencing_class_desc, is_caller_dependent
FROM sys.dm_sql_referencing_entities ('dbo.TEST_TBL', 'OBJECT');
GO

Select * FROM sys.dm_sql_referencing_entities('dbo.TEST_TBL', 'OBJECT');

INSERT INTO #TableSpaceUsed
EXEC sys.sp_MSforeachtable 'sp_spaceused ''?''';

Create Table #DependentObj
(
TableName NVarchar(255),
referencing_entity_name NVarchar(255)
)

Insert Into #DependentObj(TableName,referencing_entity_name)
EXEC sys.sp_MSforeachtable 'Select ''?'' As TableName,referencing_entity_name FROM sys.dm_sql_referencing_entities(''?'', ''OBJECT'')'

Select * from #DependentObj
Where TableName not Like '%Error%'

And referencing_entity_name Not In('Exception_List')




No comments:

Post a Comment