Monday, March 5, 2018

DBA Daily Scripts - A


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')
--Size > 100000 AND
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

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')


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')


No comments:

Post a Comment